1. 程式人生 > >oracle11g(oracle12c通用)使用active duplicate活動複製建立備庫(資料庫遷移)

oracle11g(oracle12c通用)使用active duplicate活動複製建立備庫(資料庫遷移)

1、庫環境說明 target庫:172.16.24.144   db_name=cc,db_unique_name=cc 庫是完整的,啟動到open階段 SQL> select instance_name,status from v$instance ;

INSTANCE_NAME    STATUS ---------------- ------------ cc               OPEN

SQL> show parameter db_name

NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ db_name                              string      cc

SQL> show parameter db_unique_name

NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ db_unique_name                       string      cc

auxiliary庫:172.16.24.145 db_name=cc,db_unique_name=ccaux   注意:db_unique_name跟target庫不同 通過先手工配置一個初始化引數,把auxiliary庫啟動到nomount階段 vi $ORACLE_HOME/dbs/initcc.ora db_name='cc' db_unique_name='ccaux' 這兩個引數即可,儲存退出。 建立auxiliary庫的密碼檔案,sys密碼跟target庫設定一致。 cd $ORACLE_HOME/dbs orapwd password=oracle file=orapwcc entries=20

axiliary庫起到nomount階段 export ORACLE_SID=cc sqlplus / as sysdba startup nomount

2、監聽和tns配置 target庫: listener.ora SID_LIST_LISTENER =     (SID_LIST =          (SID_DESC =              (SID_NAME = cc)          )     )

LISTENER =     (DESCRIPTION =         (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.24.144)(PORT = 1521))     )

tnsnames.ora cc =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.24.144)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = cc)     )   )

ccaux =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.24.145)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = cc)     )   )

aux庫: listener.ora SID_LIST_LISTENER =     (SID_LIST =          (SID_DESC =              (SID_NAME = cc)          )     )

LISTENER =     (DESCRIPTION =         (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.24.145)(PORT = 1521))     )

tnsnames.ora cc =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.24.144)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = cc)     )   )

ccaux =   (DESCRIPTION =     (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.24.145)(PORT = 1521))     (CONNECT_DATA =       (SERVER = DEDICATED)       (SERVICE_NAME = cc)     )   )

3、在主庫開歸檔模式 export ORACLE_SID=cc sqlplus / as sysdba shutdown immediate startup mount SQL> alter system set log_archive_dest_1='location=/oradata/arch' ;

System altered.

SQL> alter database archivelog ;

Database altered.

SQL> archive log list ; Database log mode              Archive Mode Automatic archival             Enabled Archive destination            /oradata/arch Oldest online log sequence     23 Next log sequence to archive   25 Current log sequence           25

alter database open ;

4、在target庫上建立一個測試使用者和一個測試表 SQL> create user wufan identified by wufan ;

User created.

SQL> grant resource,connect to wufan ;

Grant succeeded.

SQL> grant unlimited tablespace to wufan ;

Grant succeeded.

SQL> grant alter session to wufan ;

Grant succeeded.

SQL> conn wufan/wufan; Connected. SQL> create table tmp_list_001(id int,name varchar2(10));

Table created.

SQL> insert into tmp_list_001 values(1,'AAAAAA');

1 row created.

SQL> commit ;

Commit complete.

SQL> select * from tmp_list_001 ;

        ID NAME ---------- ----------          1 AAAAAA

5、在target(auxiliary庫也行)庫上rman登入兩個庫 rman target sys/[email protected] auxiliary sys/[email protected]

[email protected][/oracle]$rman target sys/[email protected] auxiliary sys/[email protected]

Recovery Manager: Release 12.1.0.2.0 - Production on Sat Oct 20 16:27:45 2018

Copyright (c) 1982, 2014, Oracle and/or its affiliates.  All rights reserved.

connected to target database: CC (DBID=2201514723) connected to auxiliary database: CC (not mounted)

RMAN>

6、執行指令碼 在auxiliary庫上建相關目錄 target庫: SQL> show parameter audit

NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ audit_file_dest                      string      /oracle/admin/cc/adump audit_sys_operations                 boolean     TRUE audit_syslog_level                   string audit_trail                          string      DB unified_audit_sga_queue_size         integer     1048576 SQL> show parameter db_recovery_file_dest

NAME                                 TYPE        VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest                string      /oradata/fast_recovery_area db_recovery_file_dest_size           big integer 4815M 在auxiliary庫上建立必要的目錄: mkdir -p /oracle/admin/cc/adump mkdir -p /oradata/fast_recovery_area

run{     duplicate target database     to cc     from active database     db_file_name_convert '/oradata/cc','/oradata/cc/standby/dbf'     spfile     parameter_value_convert '/oracle/product/12c','/oradata/cc/standby/spfile'     set db_unique_name='ccaux'     set log_file_name_convert '/oradata/cc','/oradata/cc/standby/redo'     set control_files='/oradata/cc/standby/control/ccaux01.ctl','/oradata/cc/standby/control/ccaux02.ctl'     set log_archive_dest_1='location=/oradata/cc/standby/archive' ; }

注:關於db_file_name_convert 引數的特別說明:

在所有匹配的初始化引數值中用第一個字串替換第一個字串。注意,DB_FILE_NAME_CONVERTLOG_FILE_NAME_CONVERT是對該規則的例外,不受影響。

可以使用PARAMETER_VALUE_CONVERT設定初始化引數值的集合,並避免顯式設定它們。例如,如果源資料庫使用磁碟組+ALPHA,而備用資料庫將使用+BETA,那麼可以通過指定SPFILE PARAMETER_VALUE_CONVERT('+ALHPA','+BETA')來修改引用這些磁碟組的所有引數。

注意:引數值在PARAMETER_VALUE_CONVERT中區分大小寫,即使相同的值在直接在初始化引數檔案或spfile檔案中設定時可能不區分大小寫。

====================================================================================================================================== RMAN> run{ 2>      duplicate target database 3>      to cc 4>      from active database 5>      db_file_name_convert '/oradata/cc','/oradata/cc/standby/dbf' 6>      spfile 7>      parameter_value_convert '/oracle/product/12c','/oradata/cc/standby/spfile' 8>      set db_unique_name='ccaux' 9>      set log_file_name_convert '/oradata/cc','/oradata/cc/standby/redo' 10>     set control_files='/oradata/cc/standby/control/ccaux01.ctl','/oradata/cc/standby/control/ccaux02.ctl' 11>     set log_archive_dest_1='location=/oradata/cc/standby/archive' ; 12> }

Starting Duplicate Db at 20-OCT-18 using target database control file instead of recovery catalog allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=173 device type=DISK current log archived

contents of Memory Script: {    restore clone from service  'cc' spfile to  '/oracle/product/12c/dbs/spfilecc.ora';    sql clone "alter system set spfile= ''/oracle/product/12c/dbs/spfilecc.ora''"; } executing Memory Script

Starting restore at 20-OCT-18 using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: using network backup set from service cc channel ORA_AUX_DISK_1: restoring SPFILE output file name=/oracle/product/12c/dbs/spfilecc.ora channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01 Finished restore at 20-OCT-18

sql statement: alter system set spfile= ''/oracle/product/12c/dbs/spfilecc.ora''

contents of Memory Script: {    sql clone "alter system set  db_name =  ''CC'' comment=  ''duplicate'' scope=spfile";    sql clone "alter system set  db_unique_name =  ''ccaux'' comment=  '''' scope=spfile";    sql clone "alter system set  log_file_name_convert =  ''/oradata/cc'', ''/oradata/cc/standby/redo'' comment=  '''' scope=spfile";    sql clone "alter system set  control_files =  ''/oradata/cc/standby/control/ccaux01.ctl'', ''/oradata/cc/standby/control/ccaux02.ctl'' comment=  '''' scope=spfile";    sql clone "alter system set  log_archive_dest_1 =  ''location=/oradata/cc/standby/archive'' comment=  '''' scope=spfile";    shutdown clone immediate;    startup clone nomount; } executing Memory Script

sql statement: alter system set  db_name =  ''CC'' comment= ''duplicate'' scope=spfile

sql statement: alter system set  db_unique_name =  ''ccaux'' comment= '''' scope=spfile

sql statement: alter system set  log_file_name_convert =  ''/oradata/cc'', ''/oradata/cc/standby/redo'' comment= '''' scope=spfile

sql statement: alter system set  control_files =  ''/oradata/cc/standby/control/ccaux01.ctl'', ''/oradata/cc/standby/control/ccaux02.ctl'' comment= '''' scope=spfile

sql statement: alter system set  log_archive_dest_1 =  ''location=/oradata/cc/standby/archive'' comment= '''' scope=spfile

Oracle instance shut down

connected to auxiliary database (not started) Oracle instance started

Total System Global Area    2499805184 bytes

Fixed Size                     2927432 bytes Variable Size                822084792 bytes Database Buffers            1660944384 bytes Redo Buffers                  13848576 bytes

contents of Memory Script: {    sql clone "alter system set  db_name =  ''CC'' comment=  ''Modified by RMAN duplicate'' scope=spfile";    shutdown clone immediate;    startup clone force nomount    restore clone from service  'cc' primary controlfile;    alter clone database mount; } executing Memory Script

sql statement: alter system set  db_name =  ''CC'' comment= ''Modified by RMAN duplicate'' scope=spfile

Oracle instance shut down

Oracle instance started

Total System Global Area    2499805184 bytes

Fixed Size                     2927432 bytes Variable Size                822084792 bytes Database Buffers            1660944384 bytes Redo Buffers                  13848576 bytes

Starting restore at 20-OCT-18 allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=12 device type=DISK

channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: using network backup set from service cc channel ORA_AUX_DISK_1: restoring control file channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01 output file name=/oradata/cc/standby/control/ccaux01.ctl output file name=/oradata/cc/standby/control/ccaux02.ctl Finished restore at 20-OCT-18

database mounted

contents of Memory Script: {    set newname for datafile  1 to  "/oradata/cc/standby/dbf/system01.dbf";    set newname for datafile  2 to  "/oradata/cc/standby/dbf/sysaux01.dbf";    set newname for datafile  3 to  "/oradata/cc/standby/dbf/undotbs01.dbf";    set newname for datafile  4 to  "/oradata/cc/standby/dbf/users01.dbf";    restore    from service  'cc'   clone database    ;    sql 'alter system archive log current'; } executing Memory Script

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 20-OCT-18 using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: using network backup set from service cc channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set channel ORA_AUX_DISK_1: restoring datafile 00001 to /oradata/cc/standby/dbf/system01.dbf channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:04 channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: using network backup set from service cc channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set channel ORA_AUX_DISK_1: restoring datafile 00002 to /oradata/cc/standby/dbf/sysaux01.dbf channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03 channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: using network backup set from service cc channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set channel ORA_AUX_DISK_1: restoring datafile 00003 to /oradata/cc/standby/dbf/undotbs01.dbf channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01 channel ORA_AUX_DISK_1: starting datafile backup set restore channel ORA_AUX_DISK_1: using network backup set from service cc channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set channel ORA_AUX_DISK_1: restoring datafile 00004 to /oradata/cc/standby/dbf/users01.dbf channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01 Finished restore at 20-OCT-18

sql statement: alter system archive log current current log archived

contents of Memory Script: {    restore clone force from service  'cc'            archivelog from scn  344329;    switch clone datafile all; } executing Memory Script

Starting restore at 20-OCT-18 using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting archived log restore to default destination channel ORA_AUX_DISK_1: using network backup set from service cc channel ORA_AUX_DISK_1: restoring archived log archived log thread=1 sequence=27 channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01 channel ORA_AUX_DISK_1: starting archived log restore to default destination channel ORA_AUX_DISK_1: using network backup set from service cc channel ORA_AUX_DISK_1: restoring archived log archived log thread=1 sequence=28 channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01 Finished restore at 20-OCT-18

datafile 1 switched to datafile copy input datafile copy RECID=5 STAMP=990059204 file name=/oradata/cc/standby/dbf/system01.dbf datafile 2 switched to datafile copy input datafile copy RECID=6 STAMP=990059204 file name=/oradata/cc/standby/dbf/sysaux01.dbf datafile 3 switched to datafile copy input datafile copy RECID=7 STAMP=990059204 file name=/oradata/cc/standby/dbf/undotbs01.dbf datafile 4 switched to datafile copy input datafile copy RECID=8 STAMP=990059204 file name=/oradata/cc/standby/dbf/users01.dbf

contents of Memory Script: {    set until scn  344643;    recover    clone database     delete archivelog    ; } executing Memory Script

executing command: SET until clause

Starting recover at 20-OCT-18 using channel ORA_AUX_DISK_1

starting media recovery

archived log for thread 1 with sequence 27 is already on disk as file /oradata/cc/standby/archive/1_27_990017315.dbf archived log for thread 1 with sequence 28 is already on disk as file /oradata/cc/standby/archive/1_28_990017315.dbf archived log file name=/oradata/cc/standby/archive/1_27_990017315.dbf thread=1 sequence=27 archived log file name=/oradata/cc/standby/archive/1_28_990017315.dbf thread=1 sequence=28 media recovery complete, elapsed time: 00:00:00 Finished recover at 20-OCT-18 Oracle instance started

Total System Global Area    2499805184 bytes

Fixed Size                     2927432 bytes Variable Size                822084792 bytes Database Buffers            1660944384 bytes Redo Buffers                  13848576 bytes

contents of Memory Script: {    sql clone "alter system set  db_name =  ''CC'' comment=  ''Reset to original value by RMAN'' scope=spfile"; } executing Memory Script

sql statement: alter system set  db_name =  ''CC'' comment= ''Reset to original value by RMAN'' scope=spfile Oracle instance started

Total System Global Area    2499805184 bytes

Fixed Size                     2927432 bytes Variable Size                822084792 bytes Database Buffers            1660944384 bytes Redo Buffers                  13848576 bytes sql statement: CREATE CONTROLFILE REUSE SET DATABASE "CC" RESETLOGS ARCHIVELOG   MAXLOGFILES     16   MAXLOGMEMBERS      3   MAXDATAFILES      100   MAXINSTANCES     8   MAXLOGHISTORY      292  LOGFILE   GROUP   1 ( '/oradata/cc/standby/redo/redo01.log' ) SIZE 50 M  REUSE,   GROUP   2 ( '/oradata/cc/standby/redo/redo02.log' ) SIZE 50 M  REUSE,   GROUP   3 ( '/oradata/cc/standby/redo/redo03.log' ) SIZE 50 M  REUSE  DATAFILE   '/oradata/cc/standby/dbf/system01.dbf'  CHARACTER SET AL32UTF8

contents of Memory Script: {    set newname for tempfile  1 to  "/oradata/cc/standby/dbf/temp01.dbf";    switch clone tempfile all;    catalog clone datafilecopy  "/oradata/cc/standby/dbf/sysaux01.dbf",  "/oradata/cc/standby/dbf/undotbs01.dbf",  "/oradata/cc/standby/dbf/users01.dbf";    switch clone datafile all; } executing Memory Script

executing command: SET NEWNAME

renamed tempfile 1 to /oradata/cc/standby/dbf/temp01.dbf in control file

cataloged datafile copy datafile copy file name=/oradata/cc/standby/dbf/sysaux01.dbf RECID=1 STAMP=990059225 cataloged datafile copy datafile copy file name=/oradata/cc/standby/dbf/undotbs01.dbf RECID=2 STAMP=990059225 cataloged datafile copy datafile copy file name=/oradata/cc/standby/dbf/users01.dbf RECID=3 STAMP=990059225

datafile 2 switched to datafile copy input datafile copy RECID=1 STAMP=990059225 file name=/oradata/cc/standby/dbf/sysaux01.dbf datafile 3 switched to datafile copy input datafile copy RECID=2 STAMP=990059225 file name=/oradata/cc/standby/dbf/undotbs01.dbf datafile 4 switched to datafile copy input datafile copy RECID=3 STAMP=990059225 file name=/oradata/cc/standby/dbf/users01.dbf

contents of Memory Script: {    Alter clone database open resetlogs; } executing Memory Script

database opened Finished Duplicate Db at 20-OCT-18

RMAN> ======================================================================================================================================

7、去auxiliary庫上檢查是否複製成功 [email protected][/oradata/cc/standby]$ll * archive: total 164 -rw-r----- 1 oracle dba 162816 Oct 21 00:26 1_27_990017315.dbf -rw-r----- 1 oracle dba   1024 Oct 21 00:26 1_28_990017315.dbf

control: total 20256 -rw-r----- 1 oracle dba 10371072 Oct 21 00:37 ccaux01.ctl -rw-r----- 1 oracle dba 10371072 Oct 21 00:37 ccaux02.ctl

dbf: total 1589040 -rw-r----- 1 oracle dba 576724992 Oct 21 00:32 sysaux01.dbf -rw-r----- 1 oracle dba 734011392 Oct 21 00:32 system01.dbf -rw-r----- 1 oracle dba  20979712 Oct 21 00:27 temp01.dbf -rw-r----- 1 oracle dba 309338112 Oct 21 00:32 undotbs01.dbf -rw-r----- 1 oracle dba   5251072 Oct 21 00:27 users01.dbf

redo: total 153612 -rw-r----- 1 oracle dba 52429312 Oct 21 00:36 redo01.log -rw-r----- 1 oracle dba 52429312 Oct 21 00:27 redo02.log -rw-r----- 1 oracle dba 52429312 Oct 21 00:27 redo03.log

spfile: total 0

8、auxiliary庫檢查測試使用者和測試表 SQL> conn wufan/wufan Connected. SQL> select * from tmp_list_001  ;

        ID NAME ---------- ----------          1 AAAAAA

SQL>