DataGuard配置

来源:互联网 发布:mac重装后是英文界面 编辑:程序博客网 时间:2024/05/17 02:31
Primary设置:

C:\Windows\system32>e:

E:\>cd E:\oracle\product\10.2.0\db_1

E:\oracle\product\10.2.0\db_1>set ORACLE_SID=ORCL


1.设置主数据库为force logging模式

SQL>sqlplus "/as sysdba"

SQL>select force_logging from v$database;

SQL>alter database force logging;  ////强制记录日志,即对数据库中的所有操作都产生日志信息,并将该信息写入到联机重做日志文件。

 

2.设置主数据库为归档模式

SQL> archive log list;

SQL> shutdown immediate ;

SQL> startup mount ;

SQL> alter database archivelog;

SQL> archive log list;


3.添加"备用联机日志文件"

先查看日志文件位置:

SQL>select * from v$logfile; ( select group#,type,memberfrom v$logfile;)

再添加:

SQL> alter database add standby logfile group 4('E:\oracle\product\10.2.0\db_1\oradata\orcl\orcl\redo04.log') size200m;

SQL> alter database add standby logfile group 5('E:\oracle\product\10.2.0\db_1\oradata\orcl\orcl\redo05.log') size200m; 

SQL> alter database add standby logfile group 6('E:\oracle\product\10.2.0\db_1\oradata\orcl\orcl\redo06.log') size200m; 

SQL> alter database add standby logfile group 7('E:\oracle\product\10.2.0\db_1\oradata\orcl\orcl\redo07.log') size200m;

4.创建主库的初始化参数给备库用

SQL>Create pfile from spfile;  //spfile是2进制文件,无法直接编辑。所以通过创建初始化文件pfile

产生的文件名为initorcl.ora存放目录默认放在E:\oracle\product\10.2.0\db_1\database下

5.在主库创建备库的控制文件

SQL>Alter database create standby controlfile as'E:\oracle\product\10.2.0\db_1\control01.ctl';

6.  在主库创建监听和配置tnsnams.ora

7.  在initorcl.ora添加内容

8. 参数文件拷贝(用Rman拷贝,不用停机)

$ rman target /

RMAN> backup full format'E:\oracle\product\10.2.0\db_1\oradata\backup\FULL_%d_%T_%s.bak'database include current controlfile for standby;

RMAN> sql 'alter system archive log current';

RMAN> Backup ArchiveLog allformat='E:\oracle\product\10.2.0\db_1\oradata\backup\arch_%d_%T_%s.bak'; 

9.启动主数据库

SQL>shutdown immediate;

SQL>startup


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

Standby操作:

///可以进行设置新的SQL标识符SQL>set sqlprompt 'scofy>'///1.C;>oradim -new -sid scofy //创建一个名为scofy的oraclesrvice ///数据库为归档模式


C:>set ORACLE_SID=scofy

SQL>sqlplus "/as sysdba" 

SQL>startup nomountpfile='E:\oracle\product\10.2.0\db_1\database\initscofy.ora';

SQL>create spfile from pfile; 

SQL>select open_mode from v$database;

1.在此standby端进行Rman还原数据库:

$rman target orcl/oracle@orcl auxiliary /       //////////sys/admin@primary auxiliary /

//////////这里必须是连接到primary,不要擅作主张改成standby,如果primary无法连接,尝试在前面加上primary所在的IP地址

RMAN> duplicate target database for standby dorecovernofilenamecheck; ///整个复制过程,会自动进行,先复制控制文件,然后再复制数据文件,再复制日志。 ///alterdatabase mount standby database ;这个语句会自动执行//必须指定NOFILENAMECHECK参数,避免覆盖primary数据库的当前的数据文件。DORECOVER并不是必选的,如果不指定,则duplicate仅修复数据文件到目标服务器,不过并不会Recover数据文件,最后将standby数据库打开到MOUNT状态,此时新创建的物理standby有可能与primary相差较远(因为备份后所有的redologs均未在standby数据库上应用过),指定DORECOVER参数后,DUPLICATE在修复数据文件到目标路径下后,就会自动对这些文件执行RECOVER。

2.添加"备用机日志文件"<如果是采用RMAN的方式进行数据库的复制的话,则添加备份联机日志文件要放在RMAN恢复数据库之后>

SQL>startup mount 

先查看日志文件位置:

SQL>select * from v$logfile; 

在添加:

SQL> alter database add standby logfile group 4('E:\oracle\product\10.2.0\db_1\oradata\scofy\redo04.log') size200m; 

SQL> alter database add standby logfile group 5('E:\oracle\product\10.2.0\db_1\oradata\scofy\redo05.log') size200m; 

SQL> alter database add standby logfile group 6('E:\oracle\product\10.2.0\db_1\oradata\scofy\redo06.log') size200m; 

SQL> alter database add standby logfile group 7('E:\oracle\product\10.2.0\db_1\oradata\scofy\redo07.log') size200m; 

3.在备库创建监听和配置tnsnams.ora  ///若tnanams.ora发生修改,必须重启监听服务才有效  C:>lsnrctlstop  C:>lsnrctl start


4.测试主备之间网络连通

  primary:

   C:>lsnrctlstart 

   C:>tnspingscofy 

standby:

   C:>lsnrctlstart 

   C:>tnsping orcl   

5..配置备库初始化参数


6.启动备用数据库

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

四、测试

注意Data Guard 启动顺序: 启动顺序:先standby ,后primary;     
 关闭顺序:先primary 后standby; 在备库将实例启动到mount状态: 
 SQL> startupnomount; 
 SQL>alter database mount standby database;  
 SQL>ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE CANCEL; ///暂停redo应用 
 SQL>alter database recover managedstandby database disconnect from session; ///启动redo应用

在备库启动监听: $lsnrctl start
 在主库启动实例: SQL>startup; 
 在主库启动监听: $lsnrctlstart 
 在主库验证归档目录是否有效: SQL> SELECTSTATUS,DESTINATION, ERROR FROM V$ARCHIVE_DEST;
  如果有错误,要排查原因。 
  SQL> alter system switchlogfile; 
  SQL> select max(sequence#) fromv$archived_log; MAX(SEQUENCE#)
   --------------          
   70 
    主备查询结果一致,Data Guard搭建结束。 
   1.测试主库产生的归档日志是否能正常传送到归档日志

主库进行日志切换: 

SQL>Alter system switch logfile; 

  然后分别查看主库和备库的E:\arch目录下是否产生了同样的归档日志文件。  ///如果standby数据库配置standbyredologs文件,DG支持以LGWR方式传输redo数据,时效性上有延后;否则只有在primary发生切换日志时,产生的归档文件才会发送到standby端

select max(sequence#) from v$archived_log;

select max(sequence#) from v$log_history;

select group#,sequence#,archived,status fromv$log; 

select name,sequence#,applied from v$archived_log;

select sequence#,applied fromv$archived_log; 

若不同步,

1.看log日志,archive是否有丢失

2.可以在备库坐如下操作:

SQL>alter database recover managed standby databasecancel;///暂停redo应用,在查询数据之前执行 

SQL>alter database recover managed standby databasedisconnect from session; ///启动redo应用




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

主备库切换

1. switchover

一般SWITCHOVER切换都是计划中的切换,特点是在切换后,不会丢失任何的数据,而且这个过程是可逆的,整个DATAGUARD环境不会被破坏, 原来DATA GUARD环境中的所有物理和逻辑STANDBY都可以继续工作。 在进行DATAGUARD的物理STANDBY切换前需要注意:

2 确认主库和从库间网络连接通畅;

2 确认没有活动的会话连接在数据库中;

2 PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;

2 确保STANDBY数据库处于ARCHIVELOG模式;

2 如果设置了REDO应用的延迟,那么将这个设置去掉;

2 确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行。

主库上的操作:

1.查看switchover状态

SQL> SELECT SWITCHOVER_STATUS FROMV$DATABASE; 

      tostandby 

附:A: switchover_status出现session active/notallowed 

        当出现sessionactive的时候表示还有活动的session,则运行:

        Alter database commit toswitchover to physical standby with sessionshutdown; 


    B: ora- 01153: anincompatible media recovery is active 

       运行下面代码

       Alter database recover managed standby databasefinish; 

       或者Alter database recover managed standbydatabase finish force; 

       Alter database recover managed standby databasedisconnect from session; 

2.切换成备库

SQL>Alter database commit to switchover to physical standbywith session shutdown; ////如果通过查询switchover_status的状态不是tostandby的话,就用上面的命令,如果是的话上面的命令去掉最后的with session sthudown>

    Database altered.     ///执行完上述SQL语句时会自动备份当前的控制文件到trace文件。

3.启动到mount和应用日志状态

SQL> shutdown immediate; 

SQL> startup nomount; 

SQL> alter database mount standbydatabase; 

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASEDISCONNECT FROM SESSION; 

4.查看数据库模式

SQL>selectdest_name,status,database_mode,recovery_mode,protection_mode fromv$archive_dest_status; 

SQL>select status,database_mode fromv$archive_dest_status;

SQL>select  SWITCHOVER_STATUS FROMV$DATABASE; 


备库上的操作:

1.查看switchover状态

SQL> SELECT SWITCHOVER_STATUS FROMV$DATABASE; 

    TO PRIMARY  ////若是switchoverpending状态,说明standby数据库没有启动redo应用,  重新执行SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROMSESSION;

2.切换成主库

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TOPRIMARY; 

/////如果上面查出的结果不是to primary,则用此语句切换:ALTER DATABASE COMMIT TOSWITCHOVER TO PRIMARY with session shutdown ;

Database altered. 

SQL> shutdown immediate; 

SQL> startup; 

SQL> alter system switch logfile; 

3.查看数据库模式

SQL>selectdest_name,status,database_mode,recovery_mode,protection_mode fromv$archive_dest_status; 

SQL>select status,database_mode fromv$archive_dest_status; 


---------------------------------------------------- 
failover

1.查看是否有日志GAP,没有应用的日志:

    SQL> SELECT UNIQUETHREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROMV$ARCHIVED_LOG;    
    ////检查归档文件是否完整,主库和备库都要执行      
    SQL> SELECT THREAD#,LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;     no rowsselected

  如果有,则拷贝过来并且注册

SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE '路径';///加入到数据字典中

重复查看直到没有应用的日志

2.然后停止应用归档:

  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASECANCEL; 

  Database altered. 

3.下面将STANDBY数据库切换为PRIMARY数据库:

  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASEFINISH FORCE; ///force会停止当前活动的RFS进程,以便立刻执行failover,///RFS是日志推送,根据配置不同,推送的进程可能是ARCH或者LGWR

    Database altered.         SQL> ALTER DATABASE COMMITTO SWITCHOVER TO PRIMARY; 

  Database altered.

   SQL> ALTER DATABASEOPEN;       检查数据库是否已经切换成功:

  SQL> SELECT DATABASE_ROLE FROMV$DATABASE; 

  DATABASE_ROLE 

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

  PRIMARY 

  至此,FAILOVER切换完成。这个时候应该马上对新的PRIMARY数据库进行备份。


0 0
原创粉丝点击