此案例是通过RDD(华为自己封装的DD脚本)+DATA GUARD来实现查询库搬迁的;
操作步骤说明:
1.克隆软件
2.开归档
3.源库开启热备begain backup (9i 只能对表空间,不能对全库)
4.RDD复制数据文件到目录库;
5.源库关闭热备end backup;
6.源库生成standby 控制文件;
7.copy生成的standby控制文件与密码文件、参数文件、归档日志到目标端
8.搭建data guard ,启用到managed reocver 模式;让系统自动追加;---注:此次data guard搭建目标端RAC只有其中一个节点进行日志接受并应用;
说明:fal_tcx3a,fal_tcx3b表示主库,fal_c4ocx3a表示备库。
主库:
1.开启日志
ALTER DATABASE FORCE LOGGING;
select log_mode,force_logging from v$database;
2.确保开启归档且log_archive_start=true
3.配置系统参数
alter system set remote_archive_enable=TRUE scope=both;
alter system set standby_archive_dest='/arch5' sid='ocx3a' scope=both;
alter system set log_archive_dest_2='service=fal_tcx3a arch reopen=30 max_failure=10' scope=both;
alter system set standby_file_management=AUTO scope=both;
主库:
alter system set fal_client='fal_tcx3a' scope=both sid='ocx3a';
alter system set fal_client='fal_tcx3b' scope=both sid='ocx3b';
alter system set fal_server='fal_c4ocx3a' scope=both sid='ocx3a';
alter system set fal_server='fal_c4ocx3a' scope=both sid='ocx3b';
4.网络netwok net配置
###DataGard####
fal_tcx3a=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.19.242.60)(PORT = 1521)))
(CONNECT_DATA =(SID = ocx3a))
)
fal_tcx3b=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.19.242.62)(PORT = 1521)))
(CONNECT_DATA =(SID = ocx3b))
)
fal_c4ocx3a=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.17.248.181)(PORT = 1521)))
(CONNECT_DATA =(SID = ocx3a))
)
fal_c4ocx3b=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.17.248.182)(PORT = 1521)))
(CONNECT_DATA =(SID = ocx3b))
)
5.填加standby redo log (由于此次只是采用ARCH 进程而非LGWR进行归档,所以不需要建standby redo )
alter database add standby logfile group 13 ('/arch5/standby/redo1_13.arc') size 1024m;
alter database add standby logfile group 14 ('/arch5/standby/redo1_14.log') size 1024m;
alter database add standby logfile group 15 ('/arch5/standby/redo1_15.arc') size 1024m;
alter database add standby logfile group 16 ('/arch5/standby/redo1_16.log') size 1024m;
alter database add standby logfile group 17 ('/arch5/standby/redo1_17.log') size 1024m;
alter database add standby logfile group 18 ('/arch5/standby/redo1_18.log') size 1024m;
alter database add standby logfile group 19 ('/arch5/standby/redo1_19.log') size 1024m;
6.生产上创建pfile.ora给standby 库
create pfile='/arch5/standby_pfile.ora' from spfile;
scp -rp /arch5/pfile.ora root@10.17.248.181:/arch5
7.复制密码文件到standby 库
8.rdd复制完数据文件后切换两次归档
alter system archive log current;
alter system archive log current;
9.生成standby 控制文件(注:)
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/arch5/standby_control01.ctl';
scp -rp /arch5/standby_control01.ctl root@10.17.248.181:/arch5
10.考贝所有归档日志文件到备库
备库
1.备库归档目录/arch5
cd /arch5
2.网络netwok net配置
###DataGard####
fal_tcx3a=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.19.242.60)(PORT = 1521)))
(CONNECT_DATA =(SID = ocx3a))
)
fal_tcx3b=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.19.242.62)(PORT = 1521)))
(CONNECT_DATA =(SID = ocx3b))
)
fal_c4ocx3a=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.17.248.181)(PORT = 1521)))
(CONNECT_DATA =(SID = ocx3a))
)
fal_c4ocx3b=(DESCRIPTION=(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.17.248.182)(PORT = 1521)))
(CONNECT_DATA =(SID = ocx3a))
)
3.创建spfile
create spfile='/dev/rspfilelv' from pfile='/arch5/standby_pfile.ora';
echo 'spfile='/dev/rspfilelv'' >initocx3a.ora
echo 'spfile='/dev/rspfilelv'' >initocx3b.ora
4.创建控制文件
dd if=/arch5/standby_control01.ctl of=/dev/rctllv1
dd if=/arch5/standby_control01.ctl of=/dev/rctllv2
dd if=/arch5/standby_control01.ctl of=/dev/rctllv3
5.修改参数文件添加如下内容
#added by hurp for data guard 2015-03-25
*.control_files='/dev/rctllv1','/dev/rctllv2','/dev/rctllv3'
*.standby_file_management=AUTO
*.remote_archive_enable=TRUE
#同一个目录就不用转换了
#*.db_file_name_convert=('/oradata/shrnc/','/oradata/shrnc/standby/')
#*.log_file_name_convert=('/oradata/shrnc/','/oradata/shrnc/standby/')
*.standby_archive_dest='/arch5'
*.log_archive_dest_2='service=fal_tcx3a arch reopen=30 max_failure=10'
alter system set log_archive_dest_2='service=fal_tcx3a arch reopen=30 max_failure=10' scope=both;
#没有使用broker
#ocx3b.log_archive_config='dg_config=(shrnc,standby)'
ocx3a.fal_client='fal_c4ocx3a'
ocx3b.fal_client='fal_c4ocx3a'
ocx3a.fal_server='fal_tcx3a'
ocx3b.fal_server='fal_tcx3b'
备库
alter system set fal_client='fal_c4ocx3a' scope=both sid='ocx3a';
alter system set fal_client='fal_c4ocx3a' scope=both sid='ocx3b';
alter system set fal_server='fal_tcx3a' scope=both sid='ocx3a';
alter system set fal_server='fal_tcx3b' scope=both sid='ocx3b';
6.备库启动到nomount状态
startup nomount
5.启动数据库到
ALTER DATABASE MOUNT STANDBY DATABASE;
6.恢复数据库
recover standby database;
7.启动应用日志执行恢复(只能在一个节点上执行)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
备库
alter system set fal_client='fal_c4ocx3a' scope=both sid='ocx3a';
alter system set fal_client='fal_c4ocx3a' scope=both sid='ocx3b';
alter system set fal_server='fal_tcx3a' scope=both sid='ocx3a';
alter system set fal_server='fal_tcx3b' scope=both sid='ocx3b';
主库:
alter system set fal_client='fal_tcx3a' scope=both sid='ocx3a';
alter system set fal_client='fal_tcx3b' scope=both sid='ocx3b';
alter system set fal_server='fal_c4ocx3a' scope=both sid='ocx3a';
alter system set fal_server='fal_c4ocx3a' scope=both sid='ocx3b';
alter system set log_archive_dest_state_2='defer' scope=both;
alter system set log_archive_dest_state_2='enable' scope=both;
alter system set log_archive_dest_2='' scope=both;
alter system set standby_archive_dest='/arch5' scope=both;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
alter system resiter
alter database register logfile '/arch5/cx3a20000296936.ARC';
主备切换:
1.原备库Tns文件配置主库连接(搭建时已分别在两个节点上面已经设置了)
2.原备库日志文件传输参数设置(如下已以设置)
alter system set log_archive_dest_2='service=fal_tcx3a arch reopen=30 max_failure=10' scope=both;
3.原主库增加standby redo log (注:本次由于没有采用LGWR进程进行日志传输因此不需要配置此步)
alter database add standby logfile group 13 ('/arch5/standby/redo1_13.arc') size 1024m;
alter database add standby logfile group 14 ('/arch5/standby/redo1_14.log') size 1024m;
alter database add standby logfile group 15 ('/arch5/standby/redo1_15.arc') size 1024m;
alter database add standby logfile group 16 ('/arch5/standby/redo1_16.log') size 1024m;
alter database add standby logfile group 17 ('/arch5/standby/redo1_17.log') size 1024m;
alter database add standby logfile group 18 ('/arch5/standby/redo1_18.log') size 1024m;
alter database add standby logfile group 19 ('/arch5/standby/redo1_19.log') size 1024m;
alter database drop standby logfile group 13;
alter database drop standby logfile group 14;
alter database drop standby logfile group 15;
alter database drop standby logfile group 16;
alter database drop standby logfile group 17;
alter database drop standby logfile group 18;
alter database drop standby logfile group 19;
4.switchover 主备正式切换
注:首先RAC主备数据库各保留一个节点,其它节点正常关闭;
主库上操作:(主-->备)
Step 1 Verify that the primary database can be switched to the standby role.
SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO STANDBY
Step 2 Initiate the switchover on the primary database.
SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
Step 3 Shut down and then mount the former primary database.
SQL> SHUTDOWN ABORT;
SQL>STARTUP nomount;
SQL>ALTER DATABASE MOUNT STANDBY DATABASE;
备库上操作:(备-->主)
Step 4 Verify that the switchover target is ready to be switched to the primary role.
SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;
SWITCHOVER_STATUS
-----------------
TO_PRIMARY
Step 5 Switch the target physical standby database role to the primary role.
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
Step 6 Open the new primary database.
SQL>ALTER DATABASE OPEN;
Step 7 modify fal_client and fal_server
切换后主库:
alter system set fal_client='fal_c4ocx3a' scope=both sid='ocx3a';
alter system set fal_client='fal_c4ocx3b' scope=both sid='ocx3b';
alter system set fal_server='fal_tcx3a' scope=both sid='ocx3a';
alter system set fal_server='fal_tcx3a' scope=both sid='ocx3b';
切换后备库
alter system set fal_client='fal_tcx3a' scope=both sid='ocx3a';
alter system set fal_client='fal_tcx3a' scope=both sid='ocx3b';
alter system set fal_server='fal_c4ocx3a' scope=both sid='ocx3a';
alter system set fal_server='fal_c4ocx3b' scope=both sid='ocx3b';
主库上操作:(主-->备)
Step 8 Start Redo Apply on the new physical standby database.
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
问题排查及日志查看:
--在standby上判断日志是否归档并应用
SELECT ARCHIVED_THREAD#, ARCHIVED_SEQ#, APPLIED_THREAD#, APPLIED_SEQ#,ERROR FROM V$ARCHIVE_DEST_STATUS;
--在standby上判断最近哪个log SEQUENCE被应用了
SELECT THREAD#, MAX(SEQUENCE#) AS "LAST_APPLIED_LOG" FROM V$LOG_HISTORY GROUP BY THREAD#;
SELECT THREAD#, SEQUENCE#, APPLIED FROM V$ARCHIVED_LOG;
建议平时用这种方法查近应用的归档
select l.thread#, l.applied, max( l.sequence# ) max_seq#
from v$archived_log l, v$database d
where l.resetlogs_change# = d.resetlogs_change#
group by l.thread#, l.applied
order by l.applied, l.thread#;
--在standby上查看归档日志创建者或位置
SELECT NAME, CREATOR, SEQUENCE#, APPLIED, COMPLETION_TIME FROM V$ARCHIVED_LOG;
--在standby上查看日志归档历史
SELECT FIRST_TIME, FIRST_CHANGE#, NEXT_CHANGE#, SEQUENCE# FROM V$LOG_HISTORY;
备库
select * from v$dataguard_status;
查看datauard的日志应用是否有延迟
select * from v$dataguard_stats
---查看standby 管理进程
select inst_id,process,pid,status,THREAD#,SEQUENCE# from gv$managed_standby;
SELECT PROCESS ,STATUS ,THREAD#,SEQUENCE#,BLOCKS,BLOCK# FROM GV$MANAGED_STANDBY;
--判断哪个日志没有被standby site接受
SELECT LOCAL.THREAD#, LOCAL.SEQUENCE# FROM
(SELECT THREAD#, SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=1) LOCAL
WHERE
LOCAL.SEQUENCE# NOT IN
(SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID=2 AND
THREAD# = LOCAL.THREAD#);
错误:
Failed to request gap sequence. Thread #: 2, gap sequence: 297242-297242
All FAL server has been attempted.
解决方案:
从主库COPY过去后注册
alter database register logfile '/arch5/cx3b20000297242.ARC';
alter system set fal_client='fal_zw3a' scope=both sid='ozw3a';
alter system set fal_client='fal_zw3b' scope=both sid='ozw3b';
alter system set fal_client='fal_tcx3a' scope=both sid='ocx3a';
alter system set fal_client='fal_tcx3b' scope=both sid='ocx3b';
alter system set fal_server='fal_tcx3a' scope=both;
alter system set log_archive_dest_state_2='defer';
alter system set log_archive_dest_state_2='enable';
alter system set fal_server='fal_tcx3a' scope=both;
alter system set log_archive_dest_state_2='defer';
alter system set log_archive_dest_state_2='enable';
Failed to request gap sequence. Thread #: 1, gap sequence: 314793-314806
All FAL server has been attempted.
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY DISCONNECT FROM SESSION;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
alter system set log_archive_dest_2='service=fal_tcx3a arch reopen=30 max_failure=10' scope=both;
alter system set log_archive_dest_2='' scope=both;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29446986/viewspace-1561604/
,如需转载,请注明出处,否则将追究法律责任。