dataguard配置记录及提示SQL

select name,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
select SEQUENCE#,DEST_ID,ARCHIVED,APPLIED,DELETED,STATUS,FIRST_TIME from v$archived_log order by SEQUENCE#;
select * from V$ARCHIVE_GAP;
select process,status,thread#,sequence#,client_pid from v$managed_standby;
SELECT MESSAGE FROM V$DATAGUARD_STATUS;
select * from v$dataguard_config;


SQL> select process,status,sequence# from v$managed_standby;


PROCESS   STATUS        SEQUENCE#
--------- ------------ ----------
ARCH      CLOSING           39767
ARCH      CONNECTED             0
ARCH      CLOSING           39766
RFS       RECEIVING             0
MRP0      WAIT_FOR_LOG      40690    --看看是否存在恢复进程
RFS       RECEIVING             0
RFS       RECEIVING             0


7 rows selected.




如果没有,可以按照如下启动:


SQL>RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
SELECT MESSAGE FROM V$DATAGUARD_STATUS;


select name,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;


select SEQUENCE#,DEST_ID,ARCHIVED,APPLIED,DELETED,STATUS,FIRST_TIME from v$archived_log order by SEQUENCE#;
select THREAD#, SEQUENCE# ,to_char(FIRST_TIME,'yyyymmdd hh24:mi'),to_char(COMPLETION_TIME,'yyyymmdd hh24:mi')  from v$archived_log order by FIRST_TIME
select max (first_time) max_first_time,           
           to_char (first_time, 'yyyy-mm-dd') day,
           count (recid) count_number,            
           count (recid) * 2048/1024 size_GB      
from v$log_history                                
group by to_char (first_time, 'yyyy-mm-dd')       
order by 1;                       


每小时
select max (first_time) max_first_time,                                 
           to_char (first_time, 'yyyy-mm-dd HH24') hour,
           count (recid) count_number,                  
           count (recid) * 2048/1024 size_GB            
from v$log_history                                      
group by to_char (first_time, 'yyyy-mm-dd HH24')        
order by 1;   




rman target /  catalog rman/rman@rman




run{
     ALLOCATE CHANNEL ch00 TYPE 'SBT_TAPE';
     ALLOCATE CHANNEL ch01 TYPE 'SBT_TAPE';
     ALLOCATE CHANNEL ch02 TYPE 'SBT_TAPE';
     ALLOCATE CHANNEL ch03 TYPE 'SBT_TAPE';
    SEND 'NB_ORA_SERV= nocnbu, NB_ORA_CLIENT= FJ_CX_ISMPDB01';
    # restore archivelog from sequence 27476 until sequence 27549;
     restore archivelog from sequence 27550 until sequence 27607;
     release channel ch00;
     release channel ch01;
     release channel ch02;
     release channel ch03;
    }








EXEC DBMS_LOGSTDBY.APPLY_SET('LOG_AUTO_DELETE', 'TRUE'); 
SELECT * FROM DBA_LOGSTDBY_PARAMETERS; 


RUN {


ALLOCATE CHANNEL ch00 TYPE disk;
ALLOCATE CHANNEL ch01 TYPE disk;


BACKUP
   filesperset 5
   FORMAT 'al_%s_%p_%t'
   skip inaccessible
   ARCHIVELOG ALL;
delete noprompt archivelog until time 'sysdate-3/1440';
BACKUP
    FORMAT 'cntrl_%s_%p_%t'
    CURRENT CONTROLFILE;
BAckup 
    FORMAT 'spfile_%s_%p_%t'
    SPFILE;
RELEASE CHANNEL ch00;
RELEASE CHANNEL ch01;
}




1.查看日志应用情况:
select sequence#,applied from v$archived_log;


2.通过V$STANDBY_LOG视图验证standby redo log文件组是否成功创建
告警错误1 Destination LOG_ARCHIVE_DEST_2 no longer supports SYNCHRONIZATION
SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
解方法1:在备库重standby redolog file,创建的大小要与主库的redolog一样!!!!!
         如果还是不行,那只能得启备库试试!!!!!!!


3.查询V$MANAGED_STANDBY视图,可以确定其是否处于重做应用状态
如果包含MRP0,则表示处于重做应用状态;所以必须先取消重做应用状态,然后才能关闭该备用数据库。
select process, status from v$managed_standby;


4.可通过检查,主数据库的归档日志状态,检查DATAGUARD的运行是否正常
SELECT DEST_ID,ERROR FROM V$ARCHIVE_DEST;
如果查询结果,显示STATUS=VALID,并且ERROR为空,则表示主数据库向备用数据库传递日志状态正常。否则,可能存在问题。
常见故障(1)-网络故障:可能由于网络原因,造成日志文件传递失败。此时,可首先可利用ping命令检查网络状态,然后利用Oralce的tnsping 命令检查tnsnames.ora文件解析情况。
常见故障(2)-密码问题:主、备数据必须保持sys用户密码的一致性。即保持orapwdSID.ora文件中sys密码的一致性。如果密码不同,则可能造成传输失败。
告警错误1 returning error ORA-16191: Primary log shipping client not logged on standby
   --密码文件是否一样:两节点执行如下
  ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON=FALSE SCOPE=BOTH;
  orapwd file=orapwbxdb password=oracle force=y ignorecase=y;
告警错误2 ORA-16047: DGID mismatch between destination setting and target database
   --查参数log_archive_dest_2




5.备用数据库,获取备用数据库中最后应用的日志的序列号。 暂记录为laseq
  SELECT MAX(SEQUENCE#) FROM V$ARCHIVED_LOG WHERE APPLIED='YES';


6.应先打开库再做日志应用,就不会报错
SQL> STARTUP MOUNT;
SQL>  ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
SQL> ALTER DATABASE OPEN;
alter database open
*
ERROR at line 1:
ORA-10456: cannot open standby database; media recovery session may be in
progress
SQL> shutdown immediate;
SQL> startup
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;
Database altered.


7.取消应用日志
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;




逻辑standby 是通过接收primary 数据库的redo log
并转换成sql 语句,然后在standby 数据库上执行SQL 语句(SQL Apply)实现同步,物理standby 是通过接收
并应用primary 数据库的redo log 以介质恢复的方式(Redo Apply)实现同步。


本次采用物理standby方式






提供在不影响primary 数据库性能前提下最高级别的数据保护策略。事务可以随时提交,当前
primary 数据库的redo 数据也需要至少写入一个standby 数据库,不过这种写入可以是不同步的。
如果网络条件理想的话,这种模式能够提供类似最高可用性的数据保护而仅对primary 数据库有轻微的性能
影响。




Read-only 模式
以read-only 模式打开后,你可以在standby 数据库执行查询,或者备份等操作(变相减轻primary
数据库压力)。此时standby 数据库仍然可以继续接收redo 数据,不过并不会触发操作,直到数据库恢
复redo 应用。也就是说read-only 模式时不能执行redo 应用,redo 应用时数据库肯定处于未打开状态。
如果需要的话,你可以在两种状态间转换,比如先应用redo,然后read-only,然后切换数据库状态再应
用redo,呵呵,人生就是循环,数据库也是一样。
? Read-write 模式
如果以read-write 模式打开,则standby 数据库将暂停从primary 数据库接收redo 数据,并且暂时
失去灾难保护的功能。当然,以read-write 模式打开也并非一无是处,比如你可能需要临时调试一些数
据,但是又不方便在正式库操作,那就可以临时将standby 数据库置为read-write 模式,操作完之后将
数据库闪回到操作前的状态(闪回之后,Data Guard 会自动同步,不需要重建standby)。
? 物理standby 特点
? 灾难恢复及高可用性
物理standby 提供了一个健全而且极高效的灾难恢复及高可用性的解决方案。更加易于管理的
switchover/failover 角色转换及最更短的计划内或计划外停机时间。
? 数据保护
应用物理standby 数据库,Dg 能够确保即使面对无法预料的灾害也能够不丢失数据。前面也
提到物理standby 是基于块对块的复制,因此对象、语句统统无关,primary 数据库上有什么,物理standby 也会有什么。
? 分担primary 数据库压力
通过将一些备份任务、仅查询的需求转移到物理standby,可以有效节省primary 数据库的cpu
以及i/o 资源。
? 提升性能
物理standby 所使用的redo 应用技术使用最底层的恢复机制,这种机制能够绕过sql 级代码层,
因此效率最高。




P31
初始化参数STANDBY_FILE_MANAGMENT 设置为manual 的话,对于表空间和
数据文件的操作必须有dba 手工介入,你肯定会问,这太麻烦了,那我干脆配置dg 的时候直接把初始
化参数设置为auto 不就好了嘛,en,你想的很好,不过三思需要提醒你地是,如果你的存储采用文件
系统,那当然没有问题,但是如果采用了裸设备,你就必须将该参数设置为manual。


P32
数据库调优时极有可能会涉及到重置日志文件大小或增加删除日志组等操作,基本上这种操作不会传
播到standby 数据库,也不会影响到standby 数据库的运行,但是如果你不注意其中的关系,造成的影响可
能会很深远,
比如,我们假设我们的一台primary 数据库拥有5 组online redo 文件,standby 数据库拥有2 组,当你
执行switch over 之后,新的primary 执行归档的频率会比standby 高的多,因此,当你在primary 数据库增
加或移除online redologs 时,一定记的手工同步一相standby 数据库中相关的设置。
这就是我们前面提到的standby redologs 与online redologs 之间的关系,即保证standby redologs 比online
redologs 要至少多一组。
操作的过程很简单(总不会复杂过添加删除数据文件),这里就不演示了,需要你注意的就是在standby
做操作前务必将STANDBY_FILE_MANAGEMENT 设置为MANUAL。


115.168.76.213:23389
fjnoc/admin@ISMP123
10.234.93.22/23 先oracle/oracle_CX 再root/Pink@db_CX










select name,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
select SEQUENCE#,DEST_ID,ARCHIVED,APPLIED,DELETED,STATUS,FIRST_TIME from v$archived_log order by SEQUENCE#;
select process,status,thread#,sequence#,client_pid from v$managed_standby;
select * from V$ARCHIVE_GAP;
SELECT MESSAGE FROM V$DATAGUARD_STATUS;
select * from v$dataguard_config;








【主库】
ALTER DATABASE FORCE LOGGING;
ALTER SYSTEM SET log_archive_config='DG_CONFIG=(mdsp,stdb)';
ALTER SYSTEM SET log_archive_dest_1='location=/home/oracle/archlog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=mdsp';
ALTER SYSTEM SET log_archive_dest_state_2='DEFER';
ALTER SYSTEM SET fal_server='stdb';
ALTER SYSTEM SET fal_client='mdsp';
ALTER SYSTEM SET standby_file_management='MANUAL';
ALTER SYSTEM SET sec_case_sensitive_logon=FALSE;
ALTER SYSTEM SET log_archive_dest_2='SERVICE=stdb LGWR ASYNC VALID_FOR=(online_logfiles,primary_role) DB_UNIQUE_NAME=stdb';


create pfile='/tmp/pfilemdsp.ora' from spfile;
scp /tmp/pfilemdsp.ora stdb:/tmp/




rman target /
backup database format '/home/oracle/backupset/full_%s_%p_%t'
alter database create standby controlfile as '/tmp/standby.ctl';
vi tnsnames.ora


ALTER SYSTEM SET log_archive_dest_state_2='ENABLE';




【备库】
vi /tmp/pfilemdsp.ora
startup pfile=/tmp/pfilemdsp.ora
create spfile from pfile=/tmp/pfilemdsp.ora
shutdown immediate;
startup nomount;


rman target /
restore standby controlfile from '/tmp/standby.ctl';
sql 'alter database mount standby database';
restore database;


ALTER DATABASE FORCE LOGGING;
ALTER SYSTEM SET log_archive_config='DG_CONFIG=(stdb,mdsp)';
ALTER SYSTEM SET log_archive_dest_1='location=/home/oracle/archlog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stdb';
ALTER SYSTEM SET log_archive_dest_state_2='DEFER';
ALTER SYSTEM SET fal_server='mdsp';
ALTER SYSTEM SET fal_client='stdb';
ALTER SYSTEM SET standby_file_management='MANUAL';
ALTER SYSTEM SET sec_case_sensitive_logon=FALSE;
ALTER SYSTEM SET log_archive_dest_2='SERVICE=mdsp LGWR ASYNC VALID_FOR=(online_logfiles,primary_role) DB_UNIQUE_NAME=mdsp';


alter database recover managed standby database cancel;


orapwd file=/home/oracle/app/oracle/product/10.2.0/db_1/dbs/orapwstdb password=oracle entries=20
vi tnsnames.ora


alter database add standby logfile group 4 ('/home/oracle/app/oracle/oradata/redo_stdby04.log') size 50M;
alter database add standby logfile group 5 ('/home/oracle/app/oracle/oradata/redo_stdby05.log') size 50M;
alter database add standby logfile group 6 ('/home/oracle/app/oracle/oradata/redo_stdby06.log') size 50M;
alter database recover managed standby database disconnect from session;
select process,status,thread#,sequence#,client_pid from v$managed_standby;




【切换演练】
两边: select name,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
主库: ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
主库: shutdown abort
备库: ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
备库: ALTER DATABASE OPEN;
原主库: startup;
原主库: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;   开启实时应用








alter database add standby logfile group 4 ('/home/oracle/app/oracle/oradata/redo_stdby04.log') size 50M;
alter database add standby logfile group 5 ('/home/oracle/app/oracle/oradata/redo_stdby05.log') size 50M;
alter database add standby logfile group 6 ('/home/oracle/app/oracle/oradata/redo_stdby06.log') size 50M;
alter database add standby logfile group 7 ('/home/oracle/app/oracle/oradata/redo_stdby07.log') size 50M;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;














【配置自动应用归档后删除】
RMAN> configure archivelog deletion policy to applied on standby;
SQL> set linesize 132
SQL> column name format a30
SQL> column value format a25
SQL> select
  2    x.ksppinm  name,
  3    y.ksppstvl  value,
  4    y.ksppstdf  isdefault,
  5    decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE')  ismod,
  6    decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE')  isadj
  7  from
  8    sys.x$ksppi x,
  9    sys.x$ksppcv y
 10  where
 11    x.inst_id = userenv('Instance') and
 12    y.inst_id = userenv('Instance') and
 13    x.indx = y.indx and
 14    x.ksppinm like '%_&par%'
 15  order by
 16    translate(x.ksppinm, ' _', ' ')
 17  /
Enter value for par: log_deletion_policy
old  14:   x.ksppinm like '%_&par%'
new  14:   x.ksppinm like '%_log_deletion_policy%'


NAME                           VALUE                     ISDEFAULT ISMOD      ISADJ
------------------------------ ------------------------- --------- ---------- -----
_log_deletion_policy           mandatory                 TRUE      FALSE      FALSE


SQL> alter system set "_log_deletion_policy"=ALL scope=spfile sid='*';


NAME                           VALUE                     ISDEFAULT ISMOD      ISADJ
------------------------------ ------------------------- --------- ---------- -----
_log_deletion_policy           ALL                       FALSE     FALSE      FALSE








【v$database Switchover_Status值的含义】
NOT ALLOWED
当前的数据库不是带有备用数据库的主数据库


PREPARING DICTIONARY
该逻辑备用数据库正在向一个主数据库和其他备用数据库发送它的重做数据,以便为切换做准备


PREPARING SWITCHOVER
接受用于切换的重做数据时,逻辑备用配置会使用它


RECOVERY NEEDED
备用数据库还没有接收到切换请求


SESSIONS ACTIVE
在主数据库中存在活动的SQL会话;在继续执行之前必须断开这些会话


SWITCHOVER PENDING
适用于那些已收到主数据库切换请求但是还没有处理该请求的备用数据库


SWITCHOVER LATENT
切换没有完成并返回到主数据库


TO LOGICAL STANDBY
主数据库已经收到了来自逻辑备用数据库的完整的字典


TO PRIMARY
该备用数据库可以转换为主数据库


TO STANDBY
该主数据库可以转换为备用数据库










Dataguard中的role transition:switchover和failover以及将failover后的old primary flackback成physical standby库 


  Dataguard中的role transition包括两种:switchover和failover,
  区别在于:switchover将一个physical standby database switchover成为primary database过程可以保证无数据丢失,在完成后其它的standby数据库和原来的primary库还可以成为这个dataguard的standby role的一部分.
  Failover当主库crash无法正常启动时,将一个standby库failover成primary role库,如果在primary库在出故障之前不是处于protection的话,将会有一些数据丢失,因为当前在写的 redo没有办法传到standby库。如果primary,standby库都打开了flashback的话,可以将原来的主库重新设为新primary role数据库的standby库。
  在进行role transition要检查:
  primary,standby是否处于archvielog模式。
  Standby库的tempory file要和primary匹配
  是rac的话:在standby RAC上只有一个实例mount,其它都要关闭


  COLUMN NAME FORMAT A18
  COLUMN VALUE FORMAT A16
  COLUMN TIME_COMPUTED FORMAT A24
  SELECT * FROM V$DATAGUARD_STATS;---可以从这张视图看到没有应用的日志应用上去要多长时间


  SQL>SELECT * FROM  V$DATAGUARD_STATS;
  NAME  VALUE UNITTIME_COMPUTED
  ----------------------------------------------------------------------------------------
  apply finish time +0000:38:57.2day(2)tosecond(1)interval26-SEP-200823:16:39
  apply lag +0009:48:00day(2)tosecond(0)interval26-SEP-200823:16:39
  estimated startup 25second26-SEP-200823:16:39
  time
  standby has bee no N 26-SEP-200823:16:39
  pen
  transportlag+0000:00:00day(2)tosecond(0)interval26-SEP-200823:16:39
  SQL>select NAME,DB_UNIQUE_NAME,open_mode,DATABASE_ROLE from v$database;




本文介绍了dataguard中的role transition:switchover和failover以及如何将failover后的old primary flackback成physical standby库。 
  一.Switchovers的过程:


  1. 检查主库目前的状态:
  SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;


  SWITCHOVER_STATUS


  --------------------


  TO STANDBY


  2.将主库置为standby role


  SQL>alter database  commit to switchover to  physicalstandby;
  SQL>shutdown immediate;
  SQL>startup mount;
  
  2. standby库转为primary


  SQL>select NAME,DB_UNIQUE_NAME,open_mode,DATABASE_ROLE  from v$database;
  SQL>SELECTSWITCHOVER_STATUSFROMV$DATABASE;
  SWITCHOVER_STATUS
  --------------------
  TOPRIMARY
  SQL>alter database commit to switchover to primary;
  SQL>alterdatabaseopen;
  SQL>select NAME,DB_UNIQUE_NAME,open_mode,DATABASE_ROLE from v$database;
  NAME DB_UNIQUE_NAME OPEN_MODE DATABASE_ROLE
  --------------------------------------------------------------------------
  MAINDB standb READ WRITE PRIMARY


  主库上:


  SQL>alter database recover managed standby database disconnect fromsession;
  SQL>select NAME,DB_UNIQUE_NAME,open_mode,DATABASE_ROLE from v$database;
  NAMEDB_UNIQUE_NAMEOPEN_MODEDATABASE_ROLE
  --------------------------------------------------------------------------
  MAINDB maindb MOUNTED PHYSICAL STANDBY




本文介绍了dataguard中的role transition:switchover和failover以及如何将failover后的old primary flackback成physical standby库。 
  二.Failovers的过程:


  查询没有应用的日志:


  SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
  THREAD# LOW_SEQUENCE# HIGH_SEQUENCE#


  Cp过来并register


  SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';
  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
  SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
  SQL> ALTER DATABASE OPEN;


  一旦主数据故障无法使用,就可以迅速激活镜像备份:


  1、如果可能,归档主服务器当前重做日志,传送到镜像服务器;


  2、使用主服务器的归档日志文件做恢复:


  SQL>recover standby database;


  3、激活并打开数据库:


  SQL>alter database activate standby database;
  SQL>alter database mount;
  SQL>alter database open;


  三.将Failover之后的老的主库 flashback成新primary的standby库:


  1. 在新主库查出failover时的SCN:


  SQL>SELECT TO_CHAR(STANDBY_BECAME_PRIMARY_SCN) FROM V$DATABASE;
  TO_CHAR(STANDBY_BECAME_PRIMARY_SCN)
  ----------------------------------------
  172313


  2. 在old primary库上:


  SQL>SHUTDOWN IMMEDIATE;
  SQL>STARTUP MOUNT;
  SQL>FLASHBACK DATABASE TO SCN 172313;
  SQL>ALTER DATABASE CONVERT TO PHYSICAL STANDBY;
  SQL>SHUTDOWN IMMEDIATE;
  SQL>STARTUP MOUNT;
  SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;






#
###############################################################################################
#






select name,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
select SEQUENCE#,DEST_ID,ARCHIVED,APPLIED,DELETED,STATUS,FIRST_TIME from v$archived_log order by SEQUENCE#;
select process,status,thread#,sequence#,client_pid from v$managed_standby;
select * from V$ARCHIVE_GAP;
SELECT MESSAGE FROM V$DATAGUARD_STATUS;
select * from v$dataguard_config;








【主库】
ALTER DATABASE FORCE LOGGING;
ALTER SYSTEM SET log_archive_config='DG_CONFIG=(mdsp,stdb)';
ALTER SYSTEM SET log_archive_dest_1='location=/home/oracle/archlog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=mdsp';
ALTER SYSTEM SET log_archive_dest_state_2='DEFER';
ALTER SYSTEM SET fal_server='stdb';
ALTER SYSTEM SET fal_client='mdsp';
ALTER SYSTEM SET standby_file_management='MANUAL';
ALTER SYSTEM SET sec_case_sensitive_logon=FALSE;
ALTER SYSTEM SET log_archive_dest_2='SERVICE=stdb LGWR ASYNC VALID_FOR=(online_logfiles,primary_role) DB_UNIQUE_NAME=stdb';


create pfile='/tmp/pfilemdsp.ora' from spfile;
scp /tmp/pfilemdsp.ora stdb:/tmp/




rman target /
backup database format '/home/oracle/backupset/full_%s_%p_%t'
alter database create standby controlfile as '/tmp/standby.ctl';
vi tnsnames.ora


ALTER SYSTEM SET log_archive_dest_state_2='ENABLE';




【备库】
vi /tmp/pfilemdsp.ora
startup pfile=/tmp/pfilemdsp.ora
create spfile from pfile=/tmp/pfilemdsp.ora
shutdown immediate;
startup nomount;


rman target /
restore standby controlfile from '/tmp/standby.ctl';
sql 'alter database mount standby database';
restore database;


ALTER DATABASE FORCE LOGGING;
ALTER SYSTEM SET log_archive_config='DG_CONFIG=(stdb,mdsp)';
ALTER SYSTEM SET log_archive_dest_1='location=/home/oracle/archlog/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=stdb';
ALTER SYSTEM SET log_archive_dest_state_2='DEFER';
ALTER SYSTEM SET fal_server='mdsp';
ALTER SYSTEM SET fal_client='stdb';
ALTER SYSTEM SET standby_file_management='MANUAL';
ALTER SYSTEM SET sec_case_sensitive_logon=FALSE;
ALTER SYSTEM SET log_archive_dest_2='SERVICE=mdsp LGWR ASYNC VALID_FOR=(online_logfiles,primary_role) DB_UNIQUE_NAME=mdsp';


alter database recover managed standby database cancel;


orapwd file=/home/oracle/app/oracle/product/10.2.0/db_1/dbs/orapwstdb password=oracle entries=20
vi tnsnames.ora


alter database add standby logfile group 4 ('/home/oracle/app/oracle/oradata/redo_stdby04.log') size 50M;
alter database add standby logfile group 5 ('/home/oracle/app/oracle/oradata/redo_stdby05.log') size 50M;
alter database add standby logfile group 6 ('/home/oracle/app/oracle/oradata/redo_stdby06.log') size 50M;
alter database recover managed standby database disconnect from session;
select process,status,thread#,sequence#,client_pid from v$managed_standby;




【切换演练】
两边: select name,SWITCHOVER_STATUS,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;
主库: ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
主库: shutdown abort
备库: ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;
备库: ALTER DATABASE OPEN;
原主库: startup;
原主库: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;   开启实时应用








alter database add standby logfile group 4 ('/home/oracle/app/oracle/oradata/redo_stdby04.log') size 50M;
alter database add standby logfile group 5 ('/home/oracle/app/oracle/oradata/redo_stdby05.log') size 50M;
alter database add standby logfile group 6 ('/home/oracle/app/oracle/oradata/redo_stdby06.log') size 50M;
alter database add standby logfile group 7 ('/home/oracle/app/oracle/oradata/redo_stdby07.log') size 50M;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;








【配置自动应用归档后删除】
RMAN> configure archivelog deletion policy to applied on standby;
SQL> set linesize 132
SQL> column name format a30
SQL> column value format a25
SQL> select
  2    x.ksppinm  name,
  3    y.ksppstvl  value,
  4    y.ksppstdf  isdefault,
  5    decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE')  ismod,
  6    decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE')  isadj
  7  from
  8    sys.x$ksppi x,
  9    sys.x$ksppcv y
 10  where
 11    x.inst_id = userenv('Instance') and
 12    y.inst_id = userenv('Instance') and
 13    x.indx = y.indx and
 14    x.ksppinm like '%_&par%'
 15  order by
 16    translate(x.ksppinm, ' _', ' ')
 17  /
Enter value for par: log_deletion_policy
old  14:   x.ksppinm like '%_&par%'
new  14:   x.ksppinm like '%_log_deletion_policy%'


NAME                           VALUE                     ISDEFAULT ISMOD      ISADJ
------------------------------ ------------------------- --------- ---------- -----
_log_deletion_policy           mandatory                 TRUE      FALSE      FALSE


SQL> alter system set "_log_deletion_policy"=ALL scope=spfile sid='*';


NAME                           VALUE                     ISDEFAULT ISMOD      ISADJ
------------------------------ ------------------------- --------- ---------- -----
_log_deletion_policy           ALL                       FALSE     FALSE      FALSE










5、裸设备添加数据文件问题注意
这个部分展示的是添加一个新的数据文件到主库,而备库的STANDBY_FILE_MANAGEMENT参数设置为MAUNAL,当备库的数据文件放在裸设备时,你必须将STANDBY_FILE_MANAGEMENT初始化参数设置为MANUAL。这部分也描述怎么恢复遇到的错误。
数据库在OMF管理时不要使用以下的步骤,同样,如果裸设备路径不跟主库和备库的一样,使用DB_FILE_NAME_CONVERT初始化参数来转换路径的名称。
STANDBY_FILE_MANAGEMENT设置为AUTO,无论什么时候在主库上添加或删掉新的数据文件,备库不用人工干预相应的改变即可发生在备库。这是针对于备库为文件系统才行的。如果备库使用裸设备来放数据文件,那么STANDBY_FILE_MANAGEMENT参数将继续工作,但是手动干预是必须的。这个手动干预包括确定裸设备是否存在在备库上日志应用服务恢复创建新的数据文件的重做日志。在主库上,在裸设备上创建一个新的表空间,同时,在备库创建相同的裸设备,例如:


SQL> CREATE TABLESPACE MTS2 DATAFILE '/dev/raw/raw100' size 1m;
Tablespace created.
 
SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.
The standby database automatically adds the datafile as the raw devices exist. The standby alert log shows the following:


备库自动添加数据文件到以存在的裸设备,备用告警如下:


Fri Apr 8 09:49:31 2005
Media Recovery Log /u01/MILLER/flash_recovery_area/MTS_STBY/archivelog/2005_04_08/o1_mf_1_7_15ffgt0z_.arc
Recovery created file /dev/raw/raw100
Successfully added datafile 6 to media recovery
Datafile #6: '/dev/raw/raw100'
Media Recovery Waiting for thread 1 sequence 8 (in transit)
However, if the raw device was created on the primary system but not on the standby, then the MRP process will shut down due to file-creation errors. For example, issue the following statements on the primary database:




然而,如果在主库上创建了裸设备而没有在备库上创建裸设备,那么MRP进程会因为文件创建错误而关闭,例如,在主库上发出以下语句:


SQL> CREATE TABLESPACE MTS3 DATAFILE '/dev/raw/raw101' size 1m;
Tablespace created.
 
SQL> ALTER SYSTEM SWITCH LOGFILE;
System altered.
The standby system does not have the/Dave/raw/raw101raw device created. The standby alert log shows the following messages when recovering the archive:


备用系统没有创建/dev/raw/raw101这个裸设备,备用告警日志如下:


Fri Apr 8 10:00:22 2005
Media Recovery Log /u01/MILLER/flash_recovery_area/MTS_STBY/archivelog/2005_04_08/o1_mf_1_8_15ffjrov_.arc
File #7 added to control file as 'UNNAMED00007'.
Originally created as:
'/dev/raw/raw101'
Recovery was unable to create the file as:
'/dev/raw/raw101'
MRP0: Background Media Recovery terminated with error 1274
Fri Apr 8 10:00:22 2005
Errors in file /u01/MILLER/MTS/dump/mts_mrp0_21851.trc:
ORA-01274: cannot add datafile '/dev/raw/raw101' - file could not be created
ORA-01119: error in creating database file '/dev/raw/raw101'
ORA-27041: unable to open file
Linux Error: 13: Permission denied
Additional information: 1
Some recovered datafiles maybe left media fuzzy
Media recovery may continue but open resetlogs may fail
Fri Apr 8 10:00:22 2005
Errors in file /u01/MILLER/MTS/dump/mts_mrp0_21851.trc:
ORA-01274: cannot add datafile '/dev/raw/raw101' - file could not be created
ORA-01119: error in creating database file '/dev/raw/raw101'
ORA-27041: unable to open file
Linux Error: 13: Permission denied
Additional information: 1
Fri Apr 8 10:00:22 2005
MTS; MRP0: Background Media Recovery process shutdown
ARCH: Connecting to console port...




恢复以上错误
修改上节提到的错误,执行以下步骤:
在备库上创建裸设备,赋予oracle用户权限


SQL> SELECT NAME FROM V$DATAFILE;
 
NAME
--------------------------------------------------------------------------------
/u01/MILLER/MTS/system01.dbf
/u01/MILLER/MTS/undotbs01.dbf
/u01/MILLER/MTS/sysaux01.dbf
/u01/MILLER/MTS/users01.dbf
/u01/MILLER/MTS/mts.dbf
/dev/raw/raw100
/u01/app/oracle/product/10.1.0/dbs/UNNAMED00007
 
SQL>ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;
 
SQL>ALTER DATABASE CREATE DATAFILE
2 '/u01/app/oracle/product/10.1.0/dbs/UNNAMED00007'
3 AS
4 '/dev/raw/raw101';
 
In the standby alert log you should see information similar to the following:


在备用告警日志里你应该会看见以下相似的信息:


Fri Apr 8 10:09:30 2005
alter database create datafile
'/dev/raw/raw101' as '/dev/raw/raw101'
Fri Apr 8 10:09:30 2005
Completed: alter database create datafile
'/dev/raw/raw101' a
 
On the standby database, setSTANDBY_FILE_MANAGEMENTtoAUTOand restart Redo Apply:


在备库,设置STANDBY_FILE_MANAGEMENT 为AUTO,然后重新启用重做应用:


SQL> ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
SQL> RECOVER MANAGED STANDBY DATABASE DISCONNECT;
 
At this point Redo Apply uses the new raw device datafile and recovery continues.


在这一点,重做应用使用新的裸设备上的数据文件并继续恢复。




■ To start Redo Apply in the foreground, issue the following SQL statement:
 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE;
 If you start a foreground session, control is not returned to the command prompt until recovery is canceled by another session. 
 
■ To start Redo Apply in the background, include the DISCONNECT keyword on the
 SQL statement. For example:
 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT;
 This statement starts a detached server process and immediately returns control to the user. While the managed recovery process is performing recovery in the
 background, the foreground process that issued the RECOVER statement can continue performing other tasks. This does not disconnect the current SQL session.


■ To start real-time apply, include the USING CURRENT LOGFILE clause on the SQL statement. For example:
 SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE;








查看当天每小时归档量
select logtime,count(*),round(sum(blocks * block_size) / 1024 / 1024) mbsize
 from (select trunc(first_time, 'hh') as logtime, a.BLOCKS, a.BLOCK_SIZE
  from v$archived_log a where a.DEST_ID = 1 and a.FIRST_TIME > trunc(sysdate))
  group by logtime order by logtime desc;




查看最近一周每天归档量
select logtime,count(*),round(sum(blocks * block_size) / 1024 / 1024) mbsize
  from (select trunc(first_time, 'dd') as logtime, a.BLOCKS, a.BLOCK_SIZE
   from v$archived_log a
    where a.DEST_ID = 1 and a.FIRST_TIME > trunc(sysdate - 7))
group by logtime order by logtime desc;


查看每小时每个实例的归档量
select THREAD#,to_char(logtime,'yyyy-mm-dd hh24:mi:ss'),count(*),round(sum(blocks * block_size) / 1024 / 1024) mbsize
 from (select a.THREAD#,trunc(first_time, 'hh') as logtime,a.BLOCKS,a.BLOCK_SIZE
   from v$archived_log a
    where a.DEST_ID = 1 and a.FIRST_TIME > trunc(sysdate))
     group by THREAD#, logtime order by THREAD#, to_char(logtime,'yyyy-mm-dd hh24:mi:ss') desc;
     
查看最近一周每个节点每天归档量
select THREAD#,logtime,count(*),round(sum(blocks * block_size) / 1024 / 1024) mbsize
 from (select THREAD#,trunc(first_time, 'dd') as logtime,a.BLOCKS,a.BLOCK_SIZE
  from v$archived_log a where a.DEST_ID = 1 and a.FIRST_TIME > trunc(sysdate - 7))
   group by THREAD#, logtime order by THREAD#, logtime desc;




备库延迟应用主库日志:
 方法1: 在备库应用主库日志的语句中指定delay属性
  如alter database recover managed standby database delay 120 disconnect from session;   --备库延迟120分钟应用主库日志
 方法2: log_ archive_dest_n参数中指定了delay属性
alter system set log_archive_dest_3='service=db3 lgwr async delay=120 valid_for=(all_logfiles,all_roles) db_unique_name=db3';
注意:delay属性并不是说延迟发送主库日志到备库,而是指日志到备库后,延迟多长时间应用主库日志。
  但是,如果在备库应用主库日志的语句中指定了实时应用,也就是使用了using current logfile,如alter database recover managed standby database using current logfile disconnect from session;
那么,即使在log_ archive_dest_n参数中指定了delay属性,备库也会忽略delay属性。 
  另外,备库还可以在启动redo应用时,通过附加nodelay子句的方式,取消延迟应用主库日志,如alter database recover managed standby database disconnect from session nodelay; 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值