Oracle 11g 数据库同机克隆详解

 

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;

  通过secureCRT连上主机之后,切换到oracle用户,更换目录为zengzyei,该目录为自定义目录,用户存放后期后续需要的脚本,文件。接下来设置环境变量,使得sqlplus能连上需要克隆的实例ORCL。
  通过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'
   注:1,参数文件位置/u01/app/oracle/product/11.2.0home_1s,该目录可自定义;2,.audit_file_dest='/u01/app/oracle/admin/test/adump'该目录需提前新建(以Oracle用户建立;3,*.control_files='+DATA'控制文件的位置这里只是暂时的,后续等控制文件生成之后,再具体指定。

 

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;
  注:backup前需先使数据库处于归档模式
  登陆ASMCMD命令行,执行操作命令拷贝文件:
ASMCMD> cp +DATA/orcl/datafile/system.256.877537163  +DATA/test/datafile/system01.dbf
  注:1,命令之后不能带分号,带分号复制会出现错误;2,+DATA/test/datafile/该目录需提前建好。
  登陆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
   注:1,克隆库ORCL的归档目录+FRA/test/arch/需提前建好,2,复制过来的归档日志需命名,此处为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;
  注:重做日志(redo log的目录+DATA/test/onlinelog需提前建好,其中group_1为重做日志文件名,不是目录,

  然后通过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
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> startup mount
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
Database mounted.


  注:使用startup mount,该命令直接使用spfile启动

  注册归档日志:

SQL> alter database register physical logfile ' +FRA/test/arch/ thread_1_seq_54.arc';

 

9,打开TEST库

----&gt通过应用归档日志恢复TEST数据库
SQL>recover database using backup controlfile until cancel;
----&gt以resetlogs方式打开TEST
SQL>alter database open resetlogs; 
----&gt为TEST添加临时表空间
SQL>ALTER TABLESPACE TEMP ADD TEMPFILE '+DATA/' SIZE 1024M  AUTOEXTEND ON NEXT 1m  MAXSIZE 32767M;
----&gt将数据库TEST重启,使参数生效
EPMSTRN2 SQL> shutdown immediate
EPMSTRN2 SQL> startup

  注:在应用归档日志恢复TEST数据库时,可能会提示前文注册的归档日志已经不再需要,出现如下的提示:

SQL> recover database using backup controlfile until cancel;
ORA-00279: change 1711685 generated at 07/06/2015 12:29:32 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_54_877537463.dbf
ORA-00280: change 1711685 for thread 1 is in sequence #54


Specify log: {=suggested | filename | AUTO | CANCEL}
+FRA/test/arch/thread_1_seq_54.arc
ORA-00279: change 1712180 generated at 07/06/2015 12:45:18 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_55_877537463.dbf
ORA-00280: change 1712180 for thread 1 is in sequence #55
ORA-00278: log file '+FRA/test/arch/thread_1_seq_54.arc' no longer needed for
this recovery


Specify log: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00308: cannot open archived log
'/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_55_877537463.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


ORA-00308: cannot open archived log
'/u01/app/oracle/product/11.2.0/dbhome_1/dbs/arch1_55_877537463.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


SQL> alter database open resetlogs;

Database altered.;


  这是因为ORACLE认为前文在拷贝数据文件的时候还可能产生了新的数据变化,产生了新的归档日志,如果的话,就拿过来继续恢复,如果没,就可以打开数据库了。
  至此,数据库克隆结束。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29367946/viewspace-1725580/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29367946/viewspace-1725580/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值