ITPub博客

首页 > 数据库 > Oracle > 9i 克隆+data guard 实现数据库搬迁

9i 克隆+data guard 实现数据库搬迁

原创 Oracle 作者:hurp_oracle 时间:2015-04-10 11:35:27 0 删除 编辑
此案例是通过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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-01-17

  • 博文量
    152
  • 访问量
    647380