Dataguard实战(11):RHEL4.5 安装 Oracle10G Dataguard 多个备库 - 主备库的起停和维护

十一、主备库的起停和维护

10.1 Dataguard关闭(建议先关主库再关备库)
主库:
$ sqlplus '/as sysdba'
SQL> alter system archive log current;
SQL> shutdown immediate;
物理备库:
$ sqlplus '/as sysdba'
SQL> alter database recover managed standby database cancel;
SQL> shutdown immediate;
逻辑备库:
$ sqlplus '/as sysdba'
SQL> ALTER DATABASE stop LOGICAL STANDBY APPLY;
SQL> shutdown immediate;

10.2 Dataguard开启(先开备库再开主库)
逻辑备库:
$ lsnrctl start
$ sqlplus '/as sysdba'
SQL> startup;
SQL> alter database start logical standby apply immediate;
物理备库:
$ lsnrctl start
$ sqlplus '/as sysdba'
SQL> startup mount;
SQL> recover managed standby database disconnect;
如果需要做数据库查询可以将备库从redo apply状态切换到只读状态:
SQL> recover managed standby database cancel;
SQL> alter database open read only;
物理备库在只读模式下可以增加临时文件:
SQL> alter database temp add tempfile '/orahome/oradata/PHYSTDBY/temp02.dbf' size 100m reuse;
如果备库本来就处于关闭状态,则可以直接startup而进入只读状态:
SQL> startup;
主库:
$ lsnrctl start
$ sqlplus '/as sysdba'
SQL> startup;

10.3 主库和物理备库维护

查询当前库的角色和保护模式:
SQL> select name,database_role,db_unique_name,open_mode,protection_mode,protection_level,switchover_status,supplemental_log_data_pk,supplemental_log_data_ui from v$database;

显示那些被自动触发写入alert.log或服务器trace文件的事件:
SQL> select * from v$dataguard_status;

如果备库没有接受到主库的redo数据,在主库上确认错误信息:
SQL> SELECT DEST_ID, dest_name,STATUS, DESTINATION, ERROR FROM V$ARCHIVE_DEST;

在主库上,查询待转换备库的归档文件是否连接:
SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

如过上面查到存在不连续的归档,那查找sequence 对应的归档文件:
SQL> SELECT NAME FROM V$ARCHIVED_LOG WHERE THREAD#=1 AND DEST_ID=1 AND SEQUENCE# BETWEEN 7 AND 10;

复制上面查到的归档文件到备库,如果是RAC 的话,要找对机器,然后将这些文件重新注册一下:
SQL> ALTER DATABASE REGISTER LOGFILE '/orahome/arch/PHYSTDBY/1_12_669837011.dbf';
最后重启redo 应用即可。

在备库上,察看备库已经归档的redolog:
SQL> SELECT name, applied, REGISTRAR, CREATOR, THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE#, first_time, next_time FROM V$ARCHIVED_LOG order by SEQUENCE#;

在备库上,察看备库已经应用的redolog:
SQL> SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE#, FIRST_TIME FROM V$LOG_HISTORY;
备库已经应用的日志,需要定时删除。

在主库上,察看哪些归档日志没有归档到备库(假设local归档目录的ID为1,remote的归档目录为2):
SQL> SELECT name, applied, REGISTRAR, CREATOR, THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE#
FROM (SELECT * FROM V$ARCHIVED_LOG WHERE DEST_ID = 1) a
WHERE a.SEQUENCE# NOT IN (SELECT SEQUENCE# FROM V$ARCHIVED_LOG WHERE DEST_ID = 2 AND THREAD# = a.THREAD#);

物理备库启用实时应用通过下列语句(前提是已经在备库建了standby redologs):
SQL> RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE disconnect;
物理备库取消延迟应用可以通过下列语句:
SQL> RECOVER MANAGED STANDBY DATABASE NODELAY;

如果要强制主库每10分种归档一次,那么设置主库初始化参数ARCHIVE_LAG_TARGET:
SQL> alter system set ARCHIVE_LAG_TARGET=600 scope=both;

物理备库中已经应用的归档日志需定时删除,采用rman会只能判断删除,而逻辑备库会自动删除:
RMAN> DELETE ARCHIVELOG ALL COMPLETED AFTER 'SYSDATE - 30';

为了减轻主库的压力,考虑在备库上进行rman备份:
SQL> recover managed standby database cancel;
RMAN> backup database format '';
SQL> 'alter database backup controlfile to '';

10.4 主库和逻辑备库维护

如果说,某些表或者数据不需要dataguard 保护(比如一些在逻辑standby 端生成的统计表),这个时候就需要DBMS_LOGSTDBY.SKIP。
SQL> alter database stop logical standby apply;
SQL> execute dbms_logstdby.skip('SCHEMA_DDL','U_TEST','T_TEST%'); --跳过对象的ddl 操作,可用通配符
SQL> execute dbms_logstdby.skip('DML','U_TEST','T_TEST%'); --跳过对象的dml 操作
如果说某些表某个时候取消了同步,现在希望再恢复同步:
SQL> execute DBMS_LOGSTDBY.UNSKIP('DML','U_TEST','T_TEST%');
最后再启动sql应用:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

查询当前库的角色和保护模式:
SQL> select name,database_role,db_unique_name,open_mode,protection_mode,protection_level,switchover_status,supplemental_log_data_pk,supplemental_log_data_ui from v$database;

显示那些被自动触发写入alert.log或服务器trace文件的事件:
SQL> select * from v$dataguard_status;

查询逻辑备库事件:
SQL> select event_time,event,status from DBA_LOGSTDBY_EVENTS;
默认情况下,该视图保留100 条事件的记录,不过可以通过DBMS_LOGSTDBY.APPLY_SET()过程修改该参数。

查看备库日志应用状态(等同于物理备库中的v$archived_log):
SQL> select sequence#,first_change#,next_change#,timestamp,applied from dba_logstdby_log;

查看备库LogMiner的统计信息及状态:
SQL> select *from v$logstdby_stats;

显示当前log 应用服务的相关信息,常用于诊断归档日志逻辑应用的性能问题:
SQL> select sid,serial#,spid,type,status,high_scn from v$logstdby_process;

显示sql 应用的大致状态:
SQL> select * from v$Logstdby_state;
注意state 列,该列可能有下述的几种状态:
INITIALIZING: LogMiner session 已创建并初始化
LOADING DICTIONARY: SQL 应用调用LogMiner 字典
WAITING ON GAP: SQL 应用正等待日志文件,可能有中断
APPLYING: SQL 应用正在工作
WAITING FOR DICTIONARY LOGS: SQL 应用等待LogMiner 字典信息
IDLE: SQL 应用工作非常出色,已经干的没什么可干了:)

逻辑备库有不连续的归档,怎么办?
因为逻辑standby 没有提供类型v$archive_gap之类的视图,因此在主库上通过下列的语句识别是否存在丢失的情况:
SQL> select thread#,sequence#,file_name from dba_logstdby_log l
where next_change# not in ( select first_change# from dba_logstdby_log where l.thread# = thread#)
order by thread#,sequence#;

然后复制对应的归档文件到standby,如果是RAC 的话,要找对机器,然后将这些文件重新注册一下:
SQL> ALTER DATABASE REGISTER LOGFILE '/orahome/arch/PHYSTDBY/1_12_669837011.dbf';
最后重启sql 应用即可。

10.5 注意事项

如果在主库执行 alter database clear unarchived logfile或alter database open resetlogs,则dataguard要重建。
在连续恢复模式下工作之前,需要保证之前所有的归档日志己经应用到备用库上。因为在连续恢复模式的情况下,oracle不会应用之前的归档日志,而只会应用后面陆续到来的归档日志。
新建表、表空间、datafile都能通过日志应用到备库,但新建一个临时表空间和rename datafile 均不能应用到备库上。
出现归档日志gap时,需要找出相应的归档日志,然后将这些归档日志copy到备用节点的standby_archive_dest和log_archive_dest目录下面。需要注意的是 log_archive_dest目录下也需要copy。然后ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE;
应当实时察看standby库的alert文件,就能清晰明了地知道主备更新的情况。这也是排错的重要方法。

10.6 相关视图

V$ARCHIVE_DEST
V$ARCHIVE_DEST_STATUS
V$ARCHIVE_GAP
V$ARCHIVED_LOG
V$DATABASE
V$DATAFILE
V$DATAGUARD_STATUS
V$LOG
V$LOGFILE
V$LOG_HISTORY
V$STANDBY_LOG

Logical Standby Databases Only:
DBA_LOGSTDBY_EVENTS
DBA_LOGSTDBY_LOG
DBA_LOGSTDBY_NOT_UNIQUE
DBA_LOGSTDBY_PARAMETERS
DBA_LOGSTDBY_PROGRESS
DBA_LOGSTDBY_SKIP
DBA_LOGSTDBY_SKIP_TRANSACTION
DBA_LOGSTDBY_UNSUPPORTED
V$LOGSTDBY
V$LOGSTDBY_STATS
V$MANAGED_STANDBY

--End--

 

 

from:http://hi.baidu.com/edeed/blog/item/1d4b4bfbd1dcb163034f5618.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值