一、需求
有一台服务器,需要进行目录更换,有原来的/u01/app更改为/oracle/app
二、步骤
1、克隆home
--原数据库打包 --修改/etc/oratab的配置 --修改/etc/oraInst.loc的配置 --修改环境变量配置 --克隆
2、如果数据文件也在$ORACLE_HOME下,需要做如下处理
--修改参数文件 --从pfile启动 --备份控制文件为跟踪文件 --获取控制文件,并作更改 --重建控制文件 --打开数据库 --临时文件创建
三、克隆流程
1、原数据库打包
(1)root用户操作
cd /u01 tar cvf app.tar app mkdir -p /oracle/archivelog mv /u01/app.tar /oracle chown -R oracle:oinstall /u01
(2)oracle用户操作
su - oracle cd /u01 tar xvf app.tar
2、修改/etc/oratab的配置(oracle用户配置)
旧的:mesorcl:/u01/app/oracle/product/11.2.0/db_1:N 新的:mesorcl:/oracle/app/oracle/product/11.2.0/db_1:N
3、修改/etc/oraInst.loc的配置(oracle用户配置)
旧的:inventory_loc=/u01/app/oraInventory 新的:inventory_loc=/oracle/app/oraInventory
4、修改环境变量配置(oracle用户配置)
su - oracle vi ~/.bash_profile 旧的:export ORACLE_BASE=/u01/app/oracle; 新的:export ORACLE_BASE=/oracle/app/oracle; source ~/.bash_profile
5、克隆(运行runinstall进行克隆)
[oracle@qdmes219:/u01/app] /u01/app/oracle/product/11.2.0/db_1/oui/bin/runInstaller -clone -silent -defaultHomeName ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 ORACLE_BASE=/u01/app/oracle -waitForCompletion
根据提示进行如下命令执行
[root@qdmes219 u01]# /u01/app/oracle/product/11.2.0/db_1/root.sh
注:如果克隆过程出现:
OUI-10197:Unable to create a new Oracle Home at /orahome/app/oracle/product/11.2.0/db_1. Oracle Home already exists at this location. Select another location. SEVERE:OUI-10197:Unable to create a new Oracle Home at /orahome/app/oracle/product/11.2.0/db_1. Oracle Home already exists at this location. Select another location.
删除原来的ORACLE_HOME,或者删除新的app/oracle...目录,并重新解压。
##################################################################################################################
如果数据文件也ORACLE_HOME下,则需要做如下四迁移处理
##################################################################################################################
四、数据库文件迁移
1、修改参数文件
(1)旧的:
strings $ORACLE_HOME/dbs/spfilemesorcl.ora
(2)新的使用pfile.ora:
vi /oracle/pfile.ora
*.audit_file_dest='/oracle/app/oracle/admin/mesorcl/adump' *.audit_trail='db' *.compatible='11.2.0.4' *.control_files='/oracle/app/oracle/oradata/mesorcl/control01.ctl','/oracle/app/oracle/oradata/mesorcl/control02.ctl'#Restore Controlfile *.db_16k_cache_size=0 *.db_block_size=8192 *.db_domain='' *.db_name='mesorcl' *.db_recovery_file_dest_size=32212254720 *.db_recovery_file_dest='/oracle/archivelog' *.diagnostic_dest='/oracle/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=mesorclXDB)' *.open_cursors=300 *.pga_aggregate_target=1653604352 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.sga_target=4960813056 *.undo_tablespace='UNDOTBS1'
(3)新的:创建不存在的目录:
mkdir -p /oracle/archivelog
4、从pfile启动
startup mount pfile='/oracle/pfile.ora';
5、备份控制文件为跟踪文件
SQL>alter database backup controlfile to trace as '/oracle/control_trace_noresetlogs.ctl' noresetlogs;
67、获取控制文件,并作更改
cat /oracle/control_trace_noresetlogs.ctl
(1)旧的
STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "MESORCL" NORESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/u01/app/oracle/oradata/mesorcl/redo01.log' SIZE 200M BLOCKSIZE 512, GROUP 2 '/u01/app/oracle/oradata/mesorcl/redo02.log' SIZE 200M BLOCKSIZE 512, GROUP 3 '/u01/app/oracle/oradata/mesorcl/redo03.log' SIZE 200M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/u01/app/oracle/oradata/mesorcl/system01.dbf', '/u01/app/oracle/oradata/mesorcl/sysaux01.dbf', '/u01/app/oracle/oradata/mesorcl/undotbs01.dbf', '/u01/app/oracle/oradata/mesorcl/user01.dbf', '/u01/app/oracle/oradata/mesorcl/example01.dbf', '/u01/app/oracle/oradata/mesorcl/test1_1.dbf', '/u01/app/oracle/oradata/mesorcl/test2_1.dbf', '/u01/app/oracle/oradata/mesorcl/test_tbsp01.dbf', '/u01/app/oracle/oradata/mesorcl/test03.dbf', '/u01/app/oracle/oradata/mesorcl/test04.dbf', '/u01/app/oracle/oradata/mesorcl/test06.dbf', '/u01/app/oracle/oradata/mesorcl/test07.dbf', '/u01/app/oracle/oradata/mesorcl/test05.dbf', '/u01/app/oracle/oradata/mesorcl/test08.dbf', '/u01/app/oracle/oradata/mesorcl/test10.dbf', '/u01/app/oracle/oradata/mesorcl/test082.dbf', '/u01/app/oracle/oradata/mesorcl/test11_big.dbf' CHARACTER SET AL32UTF8 ;
(2)新的(将路径全部更改为新路径,如果原数据文件未变,则无需更改)
STARTUP NOMOUNT CREATE CONTROLFILE REUSE DATABASE "MESORCL" NORESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '/oracle/app/oracle/oradata/mesorcl/redo01.log' SIZE 200M BLOCKSIZE 512, GROUP 2 '/oracle/app/oracle/oradata/mesorcl/redo02.log' SIZE 200M BLOCKSIZE 512, GROUP 3 '/oracle/app/oracle/oradata/mesorcl/redo03.log' SIZE 200M BLOCKSIZE 512 -- STANDBY LOGFILE DATAFILE '/oracle/app/oracle/oradata/mesorcl/system01.dbf', '/oracle/app/oracle/oradata/mesorcl/sysaux01.dbf', '/oracle/app/oracle/oradata/mesorcl/undotbs01.dbf', '/oracle/app/oracle/oradata/mesorcl/user01.dbf', '/oracle/app/oracle/oradata/mesorcl/example01.dbf', '/oracle/app/oracle/oradata/mesorcl/test1_1.dbf', '/oracle/app/oracle/oradata/mesorcl/test2_1.dbf', '/oracle/app/oracle/oradata/mesorcl/test_tbsp01.dbf', '/oracle/app/oracle/oradata/mesorcl/test03.dbf', '/oracle/app/oracle/oradata/mesorcl/test04.dbf', '/oracle/app/oracle/oradata/mesorcl/test06.dbf', '/oracle/app/oracle/oradata/mesorcl/test07.dbf', '/oracle/app/oracle/oradata/mesorcl/test05.dbf', '/oracle/app/oracle/oradata/mesorcl/test08.dbf', '/oracle/app/oracle/oradata/mesorcl/test10.dbf', '/oracle/app/oracle/oradata/mesorcl/test082.dbf', '/oracle/app/oracle/oradata/mesorcl/test11_big.dbf' CHARACTER SET AL32UTF8 ;
7、重建控制文件
(1)创建spfile
create spfile from pfile='/oracle/pfile.ora';
(2)关库
shutdown immediate;
(3)重建控制文件(noresetlogs方式)
根据7-2内容直接重建即可。
9、打开数据库
(1)如果打开时,提示需要恢复,则进行数据库恢复即可。
可能是因为关库时我进行了abort强制关库导致。
16:07:37 SYS@mesorcl>alter database open; alter database open * ERROR at line 1: ORA-01113: file 1 needs media recovery ORA-01110: data file 1: '/oracle/app/oracle/oradata/mesorcl/system01.dbf'
(2)恢复数据库并打开
16:07:44 SYS@mesorcl>recover database; Media recovery complete. 16:07:55 SYS@mesorcl>alter database open;
10、临时文件创建
alter tablespace temp add tempfile '/oracle/app/oracle/oradata/mesorcl/temp01.dbf';