ITPub博客

首页 > 数据库 > Oracle > DataGuard搭建

DataGuard搭建

Oracle 作者:db亮仔 时间:2015-10-13 23:08:09 0 删除 编辑
一、前提条件
1.主库是归档模式
2.从库只安装数据库软件,数据库不安装
3.主从库硬件一致,oracle数据库版本一致
内存:1-2G,swap1.5倍;2-16G,1倍,超过16G,设置为16G
/tmp空间大于1G
4.配置环境数据库用户必须有sysdba权限
5.主备库实例名称一样,都是orcl,db_unique_name不同
****************************************************************************************
二、配置:
1.判断DG是否已安装
select * from v$option where parameter ='Oracle Data Guard';
2.主库开启强制记录日志
alter database force logging;
check:
select name,force_logging from v$database;
3.在主库添加或删除文件时,在备库也会添加删除
alter system set standby_file_management='AUTO';
****************************************************************************************
三、创建standby logfiles
1.standby logfiles的大小和redo logfiles一样
2.standby redo日志文件组数比primary数据库的online redo日志组数至少多一个
一个推荐的公式为:(每节点的日志组数+1)*最大节点数,如一个节点计算:(3+1)*1=4
3.不建议组号group#紧挨着redo的,因为后续redo可能调整,建议从10往后推
cd $ORACHOE_HOME/oradata/orcl
mkdir dg
chown oracle:dba dg
alter database add standby logfile group 11 '/opt/oracle/oradata/starboss/dg/standby11.log' size 50M;
alter database add standby logfile group 12 '/opt/oracle/oradata/starboss/dg/standby12.log' size 50M;
alter database add standby logfile group 13 '/opt/oracle/oradata/starboss/dg/standby13.log' size 50M;
alter database add standby logfile group 14 '/opt/oracle/oradata/starboss/dg/standby14.log' size 50M;
************************************************************************************************
四、密码文件和控制文件创建传输
1.检查密码文件是否存在,名称格式owapwSID
2.检查REMOTE_LOGIN_PASSWORDFILE值是否为EXCLUSIVE
show parameter REMOTE_LOGIN_PASSWORDFILE
3.密码文件scp到从库
 scp orapworcl oracle@192.168.215.102:/opt/oracle/11.2/dbs 提示输入yes 
4.控制文件
1)生成standby控制文件
shutdown immediate
startup mount
alter database create standby controlfile as '/tmp/standby_control01.ctl';
startup open;
2)在备库建立对应的目录并授权
cd $ORACLE_BASE/oradata/;mkdir orcl;chown oracle:oinstall orcl
cd $ORACLE_BASE/flash_recovery_area;mkdir orcl;chown oracle:oinstall orcl
scp命令把控制文件拷贝到备库
scp control01.ctl oracle@192.168.215.102:/opt/oracle/oradata/orcl
scp control02.ctl oracle@192.168.215.102:/opt/oracle/flash_recovery_area/orcl/
*********************************************************************************
五、db_name和db_unique_name
默认两者是一致的
但是,在DG中主库和从库的db_unique_name不能一致
show parameter db_unique_name
需要显示设置,否则在spfile中无法显示
alter system set db_unique_name=orcl scope=spfile;
************************************************************************************
六、闪回数据库
建议开始闪回特性
1)配置闪回恢复区
查询:
show parameter db_recovery_file_dest
先设置大小:
alter system set db_recovery_file_dest_size=400G;
再设置位置:
alter system set db_recovery_file_dest='/opt/oracle/app/flash_recovery_area/'
2)启用
select flashback_on from v$database;
alter database flashback on;


如果你碰到 ORA-01153 报错,那一定是在备库进行此操作。你需要先取消重做日志应用,启用闪回日志,然后重新启用日志应用。
在主库启用闪回日志,不会同步备库也启用。你必须手动在主库和备库上均启用闪回日志。
如果不启用闪回日志,当出现故障转移时,你将需要完全重新开始创建一个备库。
**********************************************************************************
七、SQL*NET配置
1)主库监听
#vi $ORACLE_HOME/network/admin/listener.ora 加入内容


  虽然可以通过netca来进行配置,但是除了这个默认的外,我们还需要一个静态注册SID_LIST_LISTENER,如果没有此从参数而且
  dataguard启动顺序不正确,主库会报PING[ARC1]:Heartbeat failed to connect to standby '***'.Error is 12514导致归档无法完成
  配置如下:
SID_LIST_LISTENER=
     (SID_LIST =
  (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /opt/oracle/11.2)
      (SID_NAME = orcl)
  )
     )
          LISTENER =
   (DESCRIPTION_LIST =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = primaryDB)(PORT = 1521))
     )
   )


2)配置tnsnames
        #vi $ORACLE_HOME/network/admin/tnsnames.ora


ORCL =
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.215.101)(PORT = 1521))
     )
     (CONNECT_DATA =
       (SERVICE_NAME = orcl)
     )
   )
 
 ORCLDG =
   (DESCRIPTION =
     (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.215.102)(PORT = 1521))
     )
     (CONNECT_DATA =
       (SERVICE_NAME = orcldg)
     )
   )


3)传输到备库并修改listener.ora和tnsnames.ora
  
scp $ORACLE_HOME/network/admin/listener.ora oracle@192.168.215.102:/opt/oracle/11.2/network/admin/
scp $ORACLE_HOME/network/admin/tnsnames.ora oracle@192.168.215.102:/opt/oracle/11.2/network/admin/
          
--listener.ora:
          SID_LIST_LISTENER
   (SID_LIST =
     (SID_DESC =
        (GLOBAL_DBNAME = orcldg)
        (ORACLE_HOME = /opt/oracle/11.2)
        (SID_NAME = orcl)
      )
    )




 LISTENER =
   (DESCRIPTION_LIST =
     (DESCRIPTION =
       (ADDRESS = (PROTOCOL = TCP)(HOST = standbyDB)(PORT = 1521))
     )
   )


  tnsnames.ora:不需要修改


*************************************************************************************
八、重做日志传输配置
1)配置归档日志位置
查询已经设置的归档路径sql:
archive log list;
show parameter log_archive_dest_1;


如果没有,则需要添加:
alter system set log_archive_dest_1='LOCATION=/mjx/test valid_for=(all_logfiles,primary_role)
 db_unique_name=orcl' scope=spfile; 


  还可以使用快速恢复区作为归档目录,如LOCATION=use_db_recovery_file_dest
     官方文档里说使用 valid_for=(online_logfiles, all_roles),这将导致备库无法归档备用日志文件,因为它们不是在线日志。
     但如果使用 all_logfiles 选项,主备库将都能归档在线以及备用日志。
     如果你想在备库进行备份,并同时备份归档日志的话,必须使用 all_logfiles。


2)配置重做日志到备库
alter system set log_archive_dest_2='SERVICE=orcldg lgwr sync valid_for=(online_logfile,primary_role)   
db_unique_name=orcldg';


3))要注意STANDBY_ARCHIVE_DEST 参数不需要,已经被官方弃用。设置此参数后启动数据库,只会报 ORA-32004: 
     obsolete or deprecated parameter(s) specified for RDBMS instance 错。


*************************************************************************************************
九、配置FAL_SERVER
    这个参数指定当日志传输出现问题时,备库到哪里去找缺少的归档日志。它用在备库接收的到的重做日志间有缺口的时候。
    这种情况会发生在日志传输出现中断时,比如你需要对备库进行维护操作。在备库维护期间,没有日志传输过来,这时缺口就出现了。
    设置了这个参数,备库就会主动去寻找那些缺少的日志,并要求主库进行传输。
    你是主库,就填写:
      fal_server=从库
    从库上就反过来:
       fal_server=主库
 注意:FAL_CLIENT在11g中已经废弃,虽然可以配置但是已经不起作用了。


 sql>alter system set FAL_SERVER='orcldg';


*********************************************************************************
十、DG配置里的另外一个库的名字
 sql> alter system set log_archive_config = 'dg_config=(orcl,orcldg)';


   以上的办法是我们采用alter system的方式在线修改,还有一种比较方便的办法(但是容易出错,所以方便和安全什么时候都不可兼得)
   sql>create pfile from spfile;
   # 手工修改pfile
   sql>create spfile from pfile;
   然后用pfile生成spfile 同时传输pfile到从库修改后生成spfile


&&&注意手工增加:
   *.log_archive_dest_state_1=enable
   *.log_archive_dest_state_2=enable


vi initorcl.ora


orcl.__db_cache_size=180355072
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/opt/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=264241152
orcl.__sga_target=494927872
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=289406976
orcl.__streams_pool_size=8388608
*.audit_file_dest='/opt/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/opt/oracle/oradata/orcl/control01.ctl','/opt/oracle/flash_recovery_area/orcl/control02.ctl'#Restore Controlfile
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/opt/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=4039114752
*.diagnostic_dest='/opt/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_server='orcldg'
*.job_queue_processes=1000
*.log_archive_config='dg_config=(orcl,orcldg)'
*.log_archive_dest_1='LOCATION=/opt/oracle/oradata/orcl/archive1 valid_for=(all_logfiles,primary_role) db_unique_name=orcl'
*.log_archive_dest_2='SERVICE=orcldg lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcldg'
*.log_archive_format='orcl_%t_%s_%r.dbf'
*.memory_target=756023296
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'


拷贝参数文件到备库
scp initorcl.ora oracle@192.168.215.102:/opt/oracle/11.2/dbs/
修改备库的initorcl.ora 修改参数如下:




*.db_name='orcl'
*.db_unique_name='orcldg'
*.fal_server='orcl'
*.log_archive_config='dg_config=(orcldg,orcl)'
*.log_archive_dest_1='LOCATION=/opt/oracle/oradata/orcl/archive1 valid_for=(all_logfiles,primary_role) db_unique_name=orcldg'
*.log_archive_dest_2='SERVICE=orcl lgwr sync valid_for=(online_logfile,primary_role) db_unique_name=orcl'


然后sql>create spfile from pfile;


**********************************************************************
十一、传输主库数据到备库
1)scp -l 8192 -rp /opt/oracle/oradata/orcl/ oracle@192.168.215.102:/opt/oracle/oradata/
            注意目的地不要加orcl 会自动创建目录的
            -l是limit限制,这样最大是8192/8=1M速度,是为了解决stalled问题
            -rp 循环子目录文件
2)建立spfile中需要的目录
       如/opt/oracle/admin/orcl/adump dpdump pfile


********************************************************************
十二、启用物理备库
  sql>startup nomount
       sql>alter database mount standby database;
       (1)启动 redo 应用
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
  启动实时应用
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
          这个命令指示备库开始使用备用日志文件进行恢复。它也告诉备库命令完成后回到命令行界面


   SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
   此时只是暂时 redo 应用,并不是停止 Standby 数据库,standby 仍会保持接收只不过不会再应用
                 接收到的归档,直到你再次启动 redo 应用为止


        (2)停止standby
           正常情况下,首先
     SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
    然后再sql>shutdown immediate
    当然也可以直接shutdown immediate


        (3)备用服务器的管理模式与只读模式
    <1>.启动到管理模式


SQL>shutdown immediate;
SQL>startup nomount;
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;


    <2>.启动到只读方式    


SQL>shutdown immediate;
 SQL>startup nomount;
 SQL>alter database mount standby database;
 SQL>alter database open read only;


     <3>如果在管理恢复模式下到只读模式


SQL> recover managed standby database cancel;
 SQL> alter database open read only;


      这个时候,可以给数据库增加临时数据文件(这个在热备份的时候是没有备份过来的)
      如alter tablespace temp add tempfile '/u02/oradata/test/temp01.dbf' size 100M;


     <4>.从只读方式到管理恢复方式
     SQL> recover managed standby database disconnect from session;


         (4)应用物理备库的几点监控
      如果上面出了问题或者我们不知道成功了没有,可以用下面的方法检测


     <1>确认主备库里的归档目的地配置都是有效的
        select DEST_ID, STATUS, DESTINATION, ERROR from V$ARCHIVE_DEST where DEST_ID<=2;
        目的地状态status应该显示为 VALID,注意如果上面没有执行redo应用会有一条error信息


     <2>确认重做日志是否真的被应用了,在主库执行
        select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG where name = 'JED2' order by FIRST_TIME;
        如果归档和日志应用均正常,APPLIED 和 ARCHIVED 列都应该是 YES。(如果没有应用redo,applied应该是NO)
        很多教程里都让这个查询以 SEQUENCE# 列排序,但我不推荐。如果以 SEQUENCE# 列排序,当你做了一次故障转移后,序列号会再从1开始,
        这时使用这个查询,你将不能在结果最后看到最新的记录。我曾经很奇怪为什么查不到新记录,其实是因为新记录不是出现在最后,
        我没看到。所以,这个查询都是以 FIRST_TIME 列排序.


     <3>主库上检查是否有重做日志缺口
        如果你发现日志没有被应用,那可能是重做日志有了缺口,这种情况下备库无法进行日志应用。但如果你的 FAL_SERVER 参数设置正确,这应该不会有问题
        select STATUS, GAP_STATUS from V$ARCHIVE_DEST_STATUS where DEST_ID = 2;
        如果一切正常,应该返回 VALID 和 NO GAP .切记启用redo应用才能显示No GAP


     <4>在主备库上执行以下查询查看数据库状态
         select * from V$DATAGUARD_STATUS order by TIMESTAMP;


     <5>检查是否成功:
        主库上查看日志传送情况:
        sql>select dest_name,status,error from v$archive_dest;
        应该log_archive_dest_1和2状态应该是valid
        切换几次日志:
        sql>alter system switch logfile;
                      查看日志序号:
        sql>select sequence# from v$archived_log;
                      备库验证:
        sql>select sequence#,applied from v$archived_log;


*******************************************************************************************
十三、dataguard启动关闭顺序
       (1)监听
          先启从库再起主库
   #lsnrctl start
       (2)启动
          先启从库:
   sql>startup nomount
   sql>alter database mount standby database;
   sql>alter database recover managed standby database using current logfile disconnect from session;
   在启主库
   sql>startup
        (3)关闭:和开启正好相反
           先关主库:
    sql>shutdown immediate
    再关从库:
    sql>alter database recover managed standby database cancel;
    sql>shutdown immediate;






###############################################################################################
DG配置第二份文档参考
###############################################################################################


# 动态参数 
11. fal_server和fal_client,FAL即Fetch Archive Log,其值为Oracle Net service name,即tnsnames.ora中的服务名。
设置这两个参数可以用来解决Archive Gaps。
一旦产生了gap,fal_client会自动向fal_server请求传输gap的archivelog。
设置了这2个参数,就不需要在产生gap时手动向standby注册归档日志了。
所需要做的就是确认主库有这些归档日志,并且主库的控制文件中有这些日志的注册信息。
fal_client设置为数据库自身的service name,fal_server设置为远端数据库的service name。
fal_server可以设置多个值,用逗号隔开。
primary:
*.fal_server='dev01dg'
*.fal_client='dev01'


standby:
*.fal_server='dev01'
*.fal_client='dev01dg'



***********************************************************************************************
主库配置 


1. 强制产生日志 
alter database force logging; 
验证 select force_logging from v$database; 
2. 改归档数据库 
starup mount; 
alter database archivelog; 
alter database open; 
验证 archive log list; 
3. 创建pfile便于修改参数 
create pfile from spfile; 
编辑pfile 添加 
# dg primary 
*.db_unique_name='primary' 
--这个参数不可 scope=memory 更改 
*.log_archive_config='DG_CONFIG=(primary,standby)' 
*.log_archive_dest_1='location=/home/oracle/arc1 valid_for=(all_logfiles,all_roles) db_unique_name=primary' 
*.LOG_ARCHIVE_DEST_2='SERVICE=standby delay=1440 arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' 
*.log_archive_dest_state_1=enable 
*.log_archive_dest_state_2=enable 
*.fal_server=standby
*.fal_client=primary 
*.db_file_name_convert='standby','primary' 
*.log_file_name_convert='standby','priamry' 
-- 以上两参数不可 scope=memory 更改,切换才需要. 
*.standby_file_management=auto 
# end 
说明: 
db_unique_name # 必要参数,每个数据的唯一标识. 
log_archive_config # 必要参数 
log_archive_dest_1 # 必要参数 本地归档路径 
LOG_ARCHIVE_DEST_2 # 必要参数 远程归档日志 其中delay=1440 指明只传送归档,24小时后再应用. 
fal_server || fal_client # 主库可选参数 备库必要参数 定义主库和备库的net服务名 
db_file_name_convert || db_file_name_convert # 虽算不上必要参数 但没有会报ORA-00367和ORA-19527 错误,建议加上 
standby_file_management # 使主库增删数据文件的修改,备库能够自动同步 


4. 建立相应归档目录 启库到mount 
mkdir /home/oracle/arc1 
startup mount 
5. 创建主库密码文件 
orapwd file=$ORACLE_HOME/dbs/orapwSID password=HxHs1027CeCis entries=10 force=y ignorecase=Y 
11G 需要加 ignorecase=Y 
6. 创建备库控制文件 
alter database create standby controlfile as '/home/oracle/rman_backup/standby01.ctl'; 
或用rman 创建: 
copy current controlfile for standby to '/home/oracle/rman_backup/standby01.ctl'; 
7. 用rman全备主库 
run { 
CONFIGURE CONTROLFILE AUTOBACKUP ON; 
allocate channel t1 type disk; 
allocate channel t2 type disk; 
backup as compressed backupset database format '/home/oracle/rman_backup/full_db_%s'; 
release channel t1; 
release channel t2; 

或 
backup as compressed backupset full format '/home/oracle/rman_backup/full_db_%s' database ; 
# 记住控制文件在哪个备份片里 
8. 将主库的全备\standby控制文件\pfile参数文件\密码文件 传到备库OS上. 



***********************************************************************************************
listener.ora 配置: 


LISTENER = 
(DESCRIPTION_LIST = 
(DESCRIPTION = 
(ADDRESS = (PROTOCOL = TCP)(HOST = test01)(PORT = 1521)) 
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) 




ADR_BASE_LISTENER = /opt/oracle 


SID_LIST_LISTENER = 


(SID_LIST = 


(SID_DESC = 


(SID_NAME = PLSExtProc) 


(ORACLE_HOME = /opt/oracle/product/11g/) 


(PROGRAM = extproc) 





(SID_DESC = 


(GLOBAL_DBNAME = test) 


(ORACLE_HOME =/opt/oracle/product/11g/) 


(SID_NAME = test) 








tnsnames.ora 配置 


standby = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = test02)(PORT = 1521)) 

(CONNECT_DATA = 
(SERVICE_NAME = test) 
(SERVER = DEDICATED) 


primary = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = test01)(PORT = 1521)) 

(CONNECT_DATA = 
(SERVICE_NAME = test) 
(SERVER = DEDICATED) 






***********************************************************************************************
备库配置 

1. 修改参数文件 
# dg standby 
*.db_unique_name='standby' 
*.log_archive_config='DG_CONFIG=(primary,standby)' 
*.log_archive_dest_1='location=/home/oracle/arc1 valid_for=(all_logfiles,all_roles) db_unique_name=standby' 
*.LOG_ARCHIVE_DEST_2='SERVICE=primary arch ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=primary' 
*.log_archive_dest_state_1=enable 
*.log_archive_dest_state_2=enable 
*.fal_server=primary
*.fal_client=standby 
*.db_file_name_convert='primary','standby' 
*.log_file_name_convert='priamry','standby' 
*.standby_file_management=auto 
# end 


2. 从rman中恢复数据库 
rman target /; 
startup nomout; 
restore controlfile from '/home/oracle/rman_backup/full_db_2'; 
startup mount; 
restore database; 
shutdown immediate; 
3. 修改pfile参数 应用standby控制文件 
*.control_files='/u02/oradata/orcl/standby01.ctl' 
4. 配置主备库的TNS连接 
vi $ORACLE_HOME/network/admin/tnsname.ora 
primary= 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.10)(PORT = 1521)) 

(CONNECT_DATA = 
(SERVICE_NAME = primary) 






standby = 
(DESCRIPTION = 
(ADDRESS_LIST = 
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.20)(PORT = 1521)) 

(CONNECT_DATA = 
(SERVICE_NAME = standby) 


用 tnsping 检查 tnsping primary 5 | standby 5,主机/etc/hosts 文件也要写明主备信息 


5. 建立standby logfile 
日志大小与主库redolog大小一致.至少比主库redolog多一个. 
alter database add standby logfile group 4 ('/u02/oradata/orcl/dglog04a.log') size 50m, 
.... 



***********************************************************************************************
应用测试 最好开启 tail -f alert.log 观察是否有错误. 


1. 启动主库 startup open; 
启动备库处于应用归档状态 
alter database recover managed standby database disconnect from session; 
或略延迟参数应用现有日志. 
alter database recover managed standby database nodelay disconnect from session; 
主库切换日志 
alter system switch logfile; 
如果主库从不过来归档,可以通过在主库侧手工修改参数如下: 
ALTER SYSTEM SET log_archive_dest_state_2='DEFER' SCOPE=MEMORY; 
ALTER SYSTEM SET log_archive_dest_state_2='ENABLE' SCOPE=MEMORY; 


FAQ 
FOR 11G ORA-16191 
Data Collected 
============== 
ORA-16191: Primary log shipping client not logged on standby 


Support Update 
============== 
The issue seems to be because of password mismatch between primary and 
standby. 
The password file has to have identical authentication info for both 
primary and standby 


If you change or create the password file using orapwd for SYS,it will 
not work in 11G. 




Action Plan 
=========== 


Turn off the case sensitivity option by changing init.ora parameter 
SEC_CASE_SENSITIVE_LOGON=FALSE. 


Create password files on both servers using the same password and pass 
ignorecase=Y to orapwd utility. 


Make sure you use identical options during password file creation for 
both primary and standby 








***********************************************************************************************
用RMAN快速建立备库.主库业务不停. 


1.连接主库RMAN,做备份,并且生成standby ctl. 
RMAN> backup as compressed backupset full format='/oracle/backup_script/for_dg_%u_%s.RMN' database include current controlfile for standby; 
2.将备份集拷贝到备库,要与主库的备份目录一致. 
3.配置好备库的standby参数,启动到nomount.设置备库的监听为静态监听,让主库可以登陆到备库的nomount. 
4.在主库同时登陆主库和备库 
$ rman target / auxiliary sys/Hxhs2008@dgcecis
RMAN> duplicate target database for standby nofilenamecheck; 


恢复完成后,redo不能创建.把主库的redo文件cp到备库对应位置.recover managed standby database;会自动清除redo内容. 
RMAN-05535: WARNING: All standby logfiles were not created 
Finished Duplicate Db at 10-JUL-08 
5.到备库.开启standby.开始测试. 




指定恢复点 


SYS@cecis > alter database recover automatic standby database until time '2008-12-23 08:00:00'; 




***********************************************************************************************
切换 


switchover 
1、主变从 
select open_mode,database_role,switchover_status,protection_mode from v$database; 
如果是to standby 表可以正常切换. 
直接执行 ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY; 
否则执行: ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN; 


shutdown immediate; 
startup mount; 
alter database recover managed standby database nodelay disconnect from session; 




2、从变主 


影响切换的因素: 
1 job列队参数 job_queue_processes 将其设置为 0 ,scope=memory 不要改spfile. 
2 aq_tm高级列队管理器 aq_tm_processes 其值改 0 ,scope=memory 不要改spfile. 
3 dbsnmp oem的代理,将其停止 emctl stop agent. 




alter system set job_queue_processes=0 scope=memory; 
alter system set aq_tm_processes=0 scope=memory; 
select open_mode,database_role,switchover_status,protection_mode from v$database; 
如果是to_primary 表可以正常切换. 
执行:ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 
否则执行: ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN; 
或者 recover managed standby database finish; 
遇到ORA-16173: incompatible archival network connections active 
重新传送一个新日志,再手动应用即可.再切换 


shutdown immediate; 
startup; 


然后观察主备库日志,如果正常的话会看到备库会自动应用日志. 




***********************************************************************************************
failover 


如果主库还可以打开,检查两库的归档. 
1 确认standby数据的归档文件是否连续 
select * from v$archive_gap; 
如果有记录,按照列出的记录号复制对应的归档到standby数据库,并讲归档文件注册到字典 
必须确保所有已生成的归档文件均已存在于standby服务器. 
alter database register physical logfile '/path/arc_log_name'; 


2 检查归档文件是否完整 
分别在主和从库执行 
select distinct thread#,max(sequence#) from v$archived_log group by thread#; 


3 启动 failover 
alter database recover managed standby database finish force; 
此命令后台操作: 
applying standby redo logs. 
Incomplete recovery applied all redo ever generated. 
Resetting standby activation ID 
Background Media Recovery process shutdown 
Completed: alter database recover managed standby database finish force 
应用已有日志,并停止rfs进程. 


4 切换到primary 
alter database commit to switchover to primary; 


完善dg 新建从库.因为原主库已经不在是DG的一部分了. 






***********************************************************************************************
管理. 


standby_file_managment=auto 时不能自动应用到standby,需要手动参与的操作. 
1 临时文件的建立 
2 redo logs的建立,在primary建立online redo后一定要在备机手动建立相同的,否则切换后,新的primary执行归档的频率会比standby高很多.这就是standby redolog与online redolog之间 


的关系,要保证standby redolog比online redolog至少多一组. 
3 修改表空间状态 RW,RO,ONLINE,OFFLINE.重命令数据文件 










***********************************************************************************************
FAQ 
SWITCHOVER_STATUSVARCHAR2(18)Indicates whether switchover is allowed: 


■NOT ALLOWED - Either this is a standby database and the primary 
database has not been switched first or this is a primary database 
and there are no standby databases. 
■NOT ALLOWED - 这是一个standby数据库而且主库没有被首先选中(switched??)或者这是一个主库而且没有standby数据库. 


■SESSIONS ACTIVE - Indicates that there are active SQL sessions 
attached to the primary or standby database that need to be 
disconnected before the switchover operation is permitted. Query 
the V$SESSION view to identify the specific processes that need to 
be terminated. 
■SESSIONS ACTIVE - 表示正有活动的sql会话连接在主库或者是standby上,而这个会话需要首先断掉然后swithover这个操作才被允许.可以通过查看v$session来辨认出需要被终止的特殊的 


链接. 


■SWITCHOVER PENDING - This is a standby database and the 
primary database switchover request has been received but not 
processed. 
■SWITCHOVER PENDING - 有一个standby数据库而且主库的switchover请求已经被接受到,但是没有被处理. 


■SWITCHOVER LATENT - The switchover was in pending mode, 
but did not complete and went back to the primary database. 
■SWITCHOVER LATENT - switchover处在pending模式,但是没有文成而且返回了主库. 


■TOPRIMARY - This is a standby database and is allowed to switch 
over to a primary database. 
■TOPRIMARY - 这是一个standby数据库而且switchover到主库的请求被允许. 


■RECOVERY NEEDED - This is a standby database that has not 
received the switchover request. 
■RECOVERY NEEDED - 这是一个standby数据库而且没有接受到switchover的请求 

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

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2014-04-01

  • 博文量
    2
  • 访问量
    13788