DataGuard配置

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,member from v$logfile;)

再添加:

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

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

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

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

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 all format='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 nomount pfile='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 dorecover nofilenamecheck; ///整个复制过程,会自动进行,先复制控制文件,然后再复制数据文件,再复制日志。 ///alter database 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') size 200m; 

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

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

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

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


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

  primary:

    C:>lsnrctl start 

    C:>tnsping scofy 

standby:

    C:>lsnrctl start 

    C:>tnsping orcl    

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


6.启动备用数据库

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

四、测试

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

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

主库进行日志切换: 

SQL>Alter system switch logfile; 

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

select max(sequence#) from v$archived_log;

select max(sequence#) from v$log_history;

select group#,sequence#,archived,status from v$log; 

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

select sequence#,applied from v$archived_log; 

若不同步,

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

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

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

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




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

主备库切换

1. switchover

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

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

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

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

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

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

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

主库上的操作:

1.查看switchover状态

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; 

      to standby 

附:A: switchover_status出现session active/not allowed 

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

          Alter database commit to switchover to physical standby with session shutdown; 


    B: ora- 01153: an incompatible media recovery is active 

        运行下面代码

        Alter database recover managed standby database finish; 

        或者Alter database recover managed standby database finish force; 

        Alter database recover managed standby database disconnect from session; 

2.切换成备库

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

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

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

SQL> shutdown immediate; 

SQL> startup nomount; 

SQL> alter database mount standby database; 

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; 

4.查看数据库模式

SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status; 

SQL>select status,database_mode from v$archive_dest_status;

SQL>select   SWITCHOVER_STATUS FROM V$DATABASE; 


备库上的操作:

1.查看switchover状态

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; 

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

2.切换成主库

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 

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

Database altered. 

SQL> shutdown immediate; 

SQL> startup; 

SQL> alter system switch logfile; 

3.查看数据库模式

SQL>select dest_name,status,database_mode,recovery_mode,protection_mode from v$archive_dest_status; 

SQL>select status,database_mode from v$archive_dest_status; 


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

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

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

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

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

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

2.然后停止应用归档:

  SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

  Database altered. 

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

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

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

  Database altered.

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

  SQL> SELECT DATABASE_ROLE FROM V$DATABASE; 

  DATABASE_ROLE 

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

  PRIMARY 

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值