您好,登录后才能下订单哦!
正式环境中的OA库要从Windows迁移到Linux,但由于数据量比较大,带宽又比较窄,数据泵方式耗时太长,因此打算用DataGuard方式迁移,因此进行了测试。
环境
主库:OS:Windows VERSION:11.2.0.4 ORACLE_SID:OA DB_NAME:OA DB_UNIQUE_NAME:OA
备库:OS:Windows VERSION:11.2.0.4 ORACLE_SID:OA DB_NAME:OA DB_UNIQUE_NAME:OA_DG
级联备库:OS:Linux VERSION:11.2.0.4 ORACLE_SID:OA DB_NAME:OA DB_UNIQUE_NAME:OA_DG2
1.查看各库平台信息
SQL>select platform_id,platform_name from v$database;
主库与备库相同:
PLATFORM_ID PLATFORM_NAME
----------- ----------------------------
12 Microsoft Windows x86 64-bit
级联备库:
PLATFORM_ID PLATFORM_NAME
----------- ---------------------------
13 Linux x86 64-bit
查看兼容表格,可看到当前的平台与Oracle版本是可跨平台搭建DataGuard的,但是要打Patch 13104881(当前版本已打)
2.备库生成pfile,并将pfile、密码文件传输到OA_DG2相关目录下
3.级联备库上修改pfile
[oracle@node3 dbs]$ more initOA.ora
*. audit_file_dest ='/opt/app/oracle/admin/OA/adump'
*.audit_trail='DB'
*.compatible='11.2.0.0.0'
*. control_files ='/opt/app/oracle/oradata/OA/CONTROL01.CTL','/opt/app/oracle/fast_recovery_area/OA/CONTROL02.CTL'
*.db_block_size=8192
*.db_name='OA'
*.db_recovery_file_dest_size=4102029312
*. db_recovery_file_dest ='/opt/app/oracle/fast_recovery_area'
*. db_unique_name ='OA_DG2'
*. diagnostic_dest ='/opt/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=OAXDB)'
*. fal_client ='OA_DG2'
*. fal_server ='OA_DG'
*. db_file_name_convert ='C:\APP\ADMINISTRATOR\ORADATA\OA\','/opt/app/oracle/oradata/OA/','C:\APP\ADMINISTRATOR\FLASH_RECOVERY_AREA\OA\','/opt/app/oracle/fast_recovery_area/OA/'
*. log_file_name_convert ='C:\APP\ADMINISTRATOR\ORADATA\OA\','/opt/app/oracle/oradata/OA/'
*. log_archive_config ='dg_config=(OA,OA_DG,OA_DG2)'
*.log_archive_dest_1='location=/opt/app/oracle/archivelog valid_for=(all_logfiles,all_roles)
*.log_archive_format='ARC%S_%R.%T'
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.pga_aggregate_target=428867584
*.processes=150
*.recyclebin='OFF'
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=1291845632
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
修改红色字体部分,使其适应当前环境
4.级联备库上创建所需目录
cd $ORACLE_BASE
mkdir -p oradata/OA/adump
mkdir -p oradata/OA
mkdir -p fast_recovery_area/OA
5.添加tns
备库添加级联备库的tns
OA_DG2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.21.74.231)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oa)
)
)
级联备库添加备库的tns
OA_DG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.21.74.233)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oa)
)
)
6.修改备库参数,将standby logfile传输到级联备库
SQL> alter system set log_archive_dest_state_3=defer; --暂时关闭
SQL> alter system set log_archive_config='dg_config=(OA,OA_DG,OA_DG2)';
SQL> alter system set log_archive_dest_3='service=OA_DG2 async valid_for=(STANDBY_LOGFILES,STANDBY_ROLE) db_unique_name=OA_DG2'
7.级联备库配置静态监听
[oracle@node3 admin]$ more listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.21.74.231)(PORT = 1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME = OA)
(ORACLE_HOME = /opt/app/oracle/product/11g)
(GLOBAL_DBNAME = OA)
)
)
ADR_BASE_LISTENER = /opt/app/oracle
8.使用RMAN的复制功能创建备库:
1)lsnrctl start
2)rman target sys@primary auxiliary sys@standby
3)duplicate target database for standby from active database;
如果报错RMAN-05001: auxiliary file name /opt/app/oracle/oradata/orcl/users01.dbf conflicts with a file used by the target database,则执行duplicate target database for standby from active database nofilenamecheck;
也可以并行复制以提高性能。需要分派主库和备库多个通道后,再执行复制命令:
run
{
allocate channel chan1 type disk;
allocate channel chan2 type disk;
allocate channel chan3 type disk;
allocate channel chan4 type disk;
allocate auxiliary channel aux1 type disk;
allocate auxiliary channel aux2 type disk;
allocate auxiliary channel aux3 type disk;
allocate auxiliary channel aux4 type disk;
duplicate target database for standby from active database;
}
9.复制完成后,验证级联备库中各文件路径是否正确
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------------------------------------
/opt/app/oracle/oradata/OA/USERS01.DBF
/opt/app/oracle/oradata/OA/UNDOTBS01.DBF
/opt/app/oracle/oradata/OA/SYSAUX01.DBF
/opt/app/oracle/oradata/OA/SYSTEM01.DBF
SQL> select group#,member from v$logfile;
GROUP# TYPE MEMBER
---------- ------ --------------------------------------------------
3 ONLINE /opt/app/oracle/oradata/OA/REDO03.LOG
2 ONLINE /opt/app/oracle/oradata/OA/REDO02.LOG
1 ONLINE /opt/app/oracle/oradata/OA/REDO01.LOG
4 STANDBY C:\APP\ADMINISTRATOR\ORADATA\OA\STANDBYREDO04.LOG
5 STANDBY C:\APP\ADMINISTRATOR\ORADATA\OA\STANDBYREDO05.LOG
6 STANDBY C:\APP\ADMINISTRATOR\ORADATA\OA\STANDBYREDO06.LOG
7 STANDBY C:\APP\ADMINISTRATOR\ORADATA\OA\STANDBYREDO07.LOG
7 rows selected.
可看到standby redo的目录不正确(貌似log_file_name_convert对standby log没起作用),此时可手动删掉standby日志组,再重新添加:
SQL> alter database drop standby logfile group 4;
SQL> alter database drop standby logfile group 5;
SQL> alter database drop standby logfile group 6;
SQL> alter database drop standby logfile group 7;
SQL> alter database add standby logfile group 4 ('/opt/app/oracle/oradata/OA/STANDBYRD04.LOG') size 50M;
SQL> alter database add standby logfile group 5 ('/opt/app/oracle/oradata/OA/STANDBYRD05.LOG') size 50M;
SQL> alter database add standby logfile group 6 ('/opt/app/oracle/oradata/OA/STANDBYRD06.LOG') size 50M;
SQL> alter database add standby logfile group 7 ('/opt/app/oracle/oradata/OA/STANDBYRD07.LOG') size 50M;
验证完毕后打开备库的传输参数
SQL> alter system set log_archive_dest_3_state=enable;
验证传输是否正常,在级联备库执行
SQL> SELECT PROCESS,
2 PID,
3 STATUS,
4 SEQUENCE#,
5 DELAY_MINS
6 FROM V$MANAGED_STANDBY;
PROCESS PID STATUS SEQUENCE# DELAY_MINS
------------------------------ ---------- -------------------- ---------- ----------
ARCH 30382 CLOSING 158 0
ARCH 30384 CLOSING 154 0
ARCH 30386 CONNECTED 0 0
ARCH 30388 CLOSING 155 0
RFS 32195 IDLE 0 0
RFS 32193 IDLE 0 0
RFS 32191 IDLE 0 0
可看到RFS进程已经建立,说明传输没有问题。(如果传输有问题,可结合备库的alert日志进行处理,应该就是密码文件的问题)
10.级联备库启动实时应用
启动日志应用:
alter database recover managed standby database disconnect;
这个命令指示备库开始使用归档日志文件进行恢复。
待归档日志应用完毕后,启动实时应用:
SQL> alter database recover managed standby database cancel;
SQL> alter database open;
SQL> alter database recover managed standby database using current logfile disconnect; - -虽然语句执行后MRP进程启动成功,但验证下来还是没有真正实时应用日志。
验证实时应用情况:
SQL> SELECT * FROM V$DATAGUARD_STATS;
NAME VALUE UNIT TIME_COMPUTED DATUM_TIME
------------------------------ ------------------------------ ---------------------------------------- ------------------------------ ------------------------------
transport lag +00 00:05:22 day(2) to second(0) interval 11/01/2018 17:44:19 11/01/2018 17:43:28
apply lag +00 00:05:22 day(2) to second(0) interval 11/01/2018 17:44:19 11/01/2018 17:43:28
apply finish time day(2) to second(3) interval 11/01/2018 17:44:19
estimated startup time 11 second
注意:Oracle 11g的级联备库是不支持实时应用的,要等源库日志切换后才会应用。Oracle 12c的级联备库支持实时应用。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。