1,概述
主机:Red Hat Enterprise Linux 5
数据库:Oracle 11g R2
源库SID:orcl,克隆生成的库SID:test,
本次采用了手动拷贝数据库数据文件的方式实现同机数据库克隆。
2,配置参数文件
[root@oracle ~]# su - oracle [oracle@oracle ~]$ cd zengzeyi [oracle@oracle zengzeyi]$ . oraenv ORACLE_SID = [orcl] ? orcl The Oracle base for ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 is /u01/app/oracle [oracle@oracle zengzeyi]$ sqlplus '/as sysdba' SQL>create pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/inittest.ora' from spfile; |
通过create pfile命令为库ORCL生成pfile文本格式的参数文件。编辑inittest.ora文件,最终内容为:
test.__db_cache_size=587202560 test.__java_pool_size=16777216 test.__large_pool_size=16777216 test.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment test.__pga_aggregate_target=671088640 test.__sga_target=989855744 test.__shared_io_pool_size=0 test.__shared_pool_size=318767104 test.__streams_pool_size=33554432 *.audit_file_dest='/u01/app/oracle/admin/test/adump' *.audit_trail='db' *.compatible='11.2.0.0.0' *.control_files='+DATA' *.db_block_size=8192 *.db_create_file_dest='+DATA' *.db_domain='' *.db_name='test' *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=testXDB)' *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='EXCLUSIVE' *.undo_tablespace='UNDOTBS1' |
3,记录当前日志序号
记录ORCL库当前正在使用的日志序号(即v$log视图中status列值为CURRENT的日志序号。如下,我们记录下实例ORCL的当前日志组的日志序号为54;
SELECT sequence#,status FROM v$log;
4,拷贝数据文件
本次采用的数据库同机克隆方式为直接在线拷贝数据文件的方式,在拷贝表空间数据文件期间会将相应的表空间置为backup模式,通过alter tablespace XXX begin backup实现,数据文件拷贝完成后,再 通过命令alter tablespace XXX end backup结束该模式。
通过如下命令可查询所数据文件及其所在表空间:
SQL> select file_name,tablespace_name from dba_data_files; FILE_NAME TABLESPACE_NAME ------------------------------------------ -------------------- +DATA/orcl/datafile/users.259.877537165 USERS +DATA/orcl/datafile/undotbs1.258.877537163 UNDOTBS1 +DATA/orcl/datafile/sysaux.257.877537163 SYSAUX +DATA/orcl/datafile/system.256.877537163 SYSTEM |
登录ORCL数据库执行begin backup命令:
SQL> alter tablespace SYSTEM begin backup; |
登陆ASMCMD命令行,执行操作命令拷贝文件:
ASMCMD> cp +DATA/orcl/datafile/system.256.877537163 +DATA/test/datafile/system01.dbf |
登陆EPMS数据库再执行end backup命令,结束begin backup:
SQL> alter tablespace SYSTEM end backup; |
其他表空间的操作步骤与以上相同,拷贝时,注意文件路径要正确。
5,归档日志
数据文件拷贝完成后,在ORCL库上进行日志切换,将redo log进行归档,通过如下命令完成:
[oracle@oracle zengzeyi]$ sqlplus '/as sysdba' SQL> alter system switch logfile; SQL> alter system checkpoint; |
将从日志拷贝前记录的日志序号至此后生成的所归档日志文件均拷贝到克隆库ORCL的归档目录中:
ASMCMD> cd +FRA/orcl/ARCHIVELOG/2015_07_06 ASMCMD> ls thread_1_seq_52.262.884336631 thread_1_seq_53.263.884339851 thread_1_seq_54.266.884349919 ASMCMD> cp thread_1_seq_54.266.884349919 +FRA/test/arch/thread_1_seq_54.arc copying thread_1_seq_54.266.884349919 -> +FRA/test/arch/thread_1_seq_54.arc |
6,启动TEST至NOMOUNT
接下来要创建口令文件,以便在SQL*PLUS中以SYSDBA角色登陆数据库,以及进行远程管理。以oracle用户运行如下命令:
[oracle@oracle ~]$ orapwd file=$ORACLE_HOME/dbs/orapwtest password=oracle_4U entries=4;
注:1,oracle_4U为克隆库TEST的SYS用户的密码;2,执行上述命令前,需先设置环境变量,这里可以设置SID为orcl
使用先前编辑好的inittest.ora文件启动test实例到NOMOUNT状态。
[oracle@oracle zengzeyi]$ . oraenv ORACLE_SID = [orcl] ? test ORACLE_HOME = [/home/oracle] ? /u01/app/oracle/product/11.2.0/dbhome_1 SQL> startup nomount pfile='$ORACLE_HOME/dbs/inittest.ora'; ORACLE instance started. Total System Global Area 217157632 bytes Fixed Size 2211928 bytes Variable Size 159387560 bytes Database Buffers 50331648 bytes Redo Buffers 5226496 bytes |
7,创建控制文件
通过下面命令从ORCL库中trace出控制文件脚本:
SQL>alter database backup controlfile to trace as '/home/oracle/zengzeyi/controlfiletest.txt';
通过整理生成的controlfiletest.txt,创建TEST库的控制文件创建脚本,命名为ctl.sql,最后上传至目录/home/oracle/zengzeyi,脚本内容如下:
CREATE CONTROLFILE SET DATABASE "TEST" RESETLOGS ARCHIVELOG MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXDATAFILES 100 MAXINSTANCES 8 MAXLOGHISTORY 292 LOGFILE GROUP 1 '+DATA/test/onlinelog/group_1' SIZE 100M BLOCKSIZE 512, GROUP 2 '+DATA/test/onlinelog/group_2' SIZE 100M BLOCKSIZE 512, -- STANDBY LOGFILE DATAFILE '+DATA/test/datafile/sysaux01.dbf', '+DATA/test/datafile/system01.dbf', '+DATA/test/datafile/undotbs101.dbf', '+DATA/test/datafile/users01.dbf' CHARACTER SET AL32UTF8; |
然后通过ctl.sql脚本创建控制文件:
SQL>@ctl.sql Control file created. |
找到新生成的控制文件,此处为+DATA/test/CONTROLFILE/Current.293.884358349,再将前面生成的参数文件inittest.ora中关于控制文件位置的参数*.control_files的值修改为:+DATA/test/CONTROLFILE/Current.293.884358349。(前文只是+DATA)保存后,再使用参数文件将数据库重启至nomount,通过如下命令生成spfile文件
SQL>create spfile='+DATA' FROM pfile='/u01/app/oracle/product/11.2.0/dbhome_1/dbs/inittest.ora'; File created. |
找到新生成的spfile文件,此处为+DATA/test/PARAMETERFILE/spfile.294.884358639,再将初始参数文件inittest.ora的内容全部清空,只留下spfile文件的位置,编辑之后的inittest.ora的内容如下:
SPFILE='+DATA/TEST/PARAMETERFILE/spfile.294.884358639' |
8,注册归档日志
将从库ORCL归档目录中拷贝到TEST归档目录中的归档日志文件注册到TEST库中,以便稍后recover使用。
注册前,先关闭数据库,再使用前文生成的spfile将数据库启动至mount阶段,使用如下命令:
SQL> shutdown immediate Total System Global Area 217157632 bytes |
注:使用startup mount,该命令直接使用spfile启动
注册归档日志:
SQL> alter database register physical logfile ' +FRA/test/arch/ thread_1_seq_54.arc'; |
9,打开TEST库
---->通过应用归档日志恢复TEST数据库SQL>recover database using backup controlfile until cancel;
---->以resetlogs方式打开TEST
SQL>alter database open resetlogs;
---->为TEST添加临时表空间
SQL>ALTER TABLESPACE TEMP ADD TEMPFILE '+DATA/' SIZE 1024M AUTOEXTEND ON NEXT 1m MAXSIZE 32767M;
---->将数据库TEST重启,使参数生效
EPMSTRN2 SQL> shutdown immediate
EPMSTRN2 SQL> startup
注:在应用归档日志恢复TEST数据库时,可能会提示前文注册的归档日志已经不再需要,出现如下的提示:
SQL> recover database using backup controlfile until cancel; Database altered.; |
这是因为ORACLE认为前文在拷贝数据文件的时候还可能产生了新的数据变化,产生了新的归档日志,如果的话,就拿过来继续恢复,如果没,就可以打开数据库了。
至此,数据库克隆结束。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29367946/viewspace-1725580/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29367946/viewspace-1725580/