oracle_Linux_Data_Guard搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sj349781478/article/details/83069564

​​​​​​

  安装环境

主数据库: OS:linux6.6     DB:oracle11.2

备数据库::OS:linux6.6    DB:oracle11.2

主、备数据库安装目录结构相同。

一、主数据库配置及相关操作

set linesize 999

set pagesize 999

col member for a90

 

1、确认主库处于归档模式

>archive log list;

如果没有归档,执行以下操作:

shutdown immediate;

startup mount;

alter database archivelog;

archive log list;

alter database open;

 

 

2、将主数据库设置为force logging模式 ,使得Oracle无论什么操作都进行redo的写入

>alter database force logging;

>select log_mode,force_logging from v$database;

 

 

3、创建角色转换后接收日志的redo log

此步是可选项,主要是用于主库角色转换后做为standby log日志接收主库的日志

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/home/oracle/app/oradata/orcl/slog1.rdo') SIZE 50M;

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/home/oracle/app/oradata/orcl/slog2.rdo') SIZE 50M;

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/home/oracle/app/oradata/orcl/slog3.rdo') SIZE 50M;

SQL> select * from v$logfile;

 

4、创建数据库客户端初始化参数文件

注:主要此处修改项较多,为了方便,我们首先创建并修改pfile,然后再通过pfile 重建spfile。

SQL> create pfile from spfile;  (稍后后复制到standby的$ORACLE_HOME/dbs下)

修改客户端初始化参数文件(主库的initorcl.ora),增加下列内容

vi  /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora

*.db_name=orcl

*.DB_UNIQUE_NAME=ossdb1

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(ossdb1,ossdb2)'

*.LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/app/oradata/orcl/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ossdb1' 

 

*.LOG_ARCHIVE_DEST_2='SERVICE=ossdb2 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ossdb2'

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

LOG_ARCHIVE_MAX_PROCESSES=30

--下面是角色转换用到的参数

*.FAL_CLIENT=ossdb1 

*.FAL_SERVER=ossdb2 

*.DB_FILE_NAME_CONVERT='/home/oracle/app/oradata/orcl/','/home/oracle/app/oradata/orcl/'

*.LOG_FILE_NAME_CONVERT='/home/oracle/app/oradata/orcl/','/home/oracle/app/oradata/orcl/'

*.STANDBY_FILE_MANAGEMENT=AUTO    #主库数据库文件发生变化,备库也会增加

通过pfile 重建spfile

SQL> shutdown immediate

SQL> create spfile from pfile='initorcl.ora';

SQL> startup

 

5、创建一份主库的备份

用rman或其它方法备份主库的数据文件,这里使用的是将主库数据文件拷贝到备库方式。

 

Shutdown主库,将主库备份文件*.dbf文件拷贝的备机上

$ scp *.dbf [email protected]:/home/oracle/app/oradata/orcl/

 

6、创建standby 数据库控制文件

 

主库 

SQL> startup mount

ALTER  DATABASE CREATE STANDBY CONTROLFILE  AS ‘/tmp/ossdb2trl1.ctl’;

 

拷贝控制文件至备库

scp ossdb2trl1.ctl  [email protected]:/home/oracle/app/oradata/orcl/

 

 

拷贝init文件至备库并修改

scp initorcl.ora  [email protected]:/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/

 

*.control_files='/home/oracle/app/oradata/orcl/ossdb2trl1.ctl', '/home/oracle/app/oradata/orcl/ossddb2trl2.ctl'

*.db_name=orcl

*.DB_UNIQUE_NAME=ossdb2

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(ossdb1,ossdb2)'

*.DB_FILE_NAME_CONVERT='/home/oracle/app/oradata/orcl/','/home/oracle/app/oradata/orcl/'

*.LOG_FILE_NAME_CONVERT='/home/oracle/app/oradata/orcl/','/home/oracle/app/oradata/orcl/'

*.LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc

*.LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/app/oradata/orcl/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=ossdb2'

*.LOG_ARCHIVE_DEST_STATE_1=ENABLE

 

#---下列参数用于角色切换

 

*.LOG_ARCHIVE_DEST_2='SERVICE=ossdb1 LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ossdb1'

*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

*.FAL_SERVER=ossdb1

*.FAL_CLIENT=ossdb2

*.STANDBY_FILE_MANAGEMENT=AUTO

 

拷贝密码文件

scp /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl   [email protected]:/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/

 

7、配置主数据库tnsnames.ora文件

cd  /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin

vi tnsnames.ora

ossdb1 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = ossdb1)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

ossdb2 =

  (DESCRIPTION =

   (ADDRESS_LIST =

    (ADDRESS = (PROTOCOL = TCP)(HOST = ossdb2)(PORT = 1521))

)

      (CONNECT_DATA =

      (SID = orcl)

    )

  )

 

8、配置备数据库tnsnames.ora文件

cd  /home/oracle/app/oracle/product/11.2.0/dbhome_1/network/admin

vi tnsnames.ora

ossdb2=

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = ossdb2)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

ossdb1 =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST = ossdb1)(PORT = 1521))

    )

    (CONNECT_DATA =

      (sid = orcl)

    )

)

 

 

注:listener.ora装数据库一般都已经配好,不用动就行。

配完之后重启主备listener:

[oracle@DB1 ~]$ lsnrctl stop

[oracle@DB1 ~]$ lsnrctl start

使用tnsping测试   

$tnsping ossdb1

注意空格,括号等

 

 

二、Standby数据库配置及相关操作

1、通过该pfile 创建spfile

SQL> create spfile from pfile;

 

2、启动standby 到mount

SQL> startup mount;

 

3、启动redo 应用

SQL> alter database recover managed standby database disconnect from session;

SQL> recover managed standby database cancel;

SQL> alter database open;

SQL> select name,open_mode,PROTECTION_MODE,DATABASE_ROLE from v$database;

 

 

三、oracle dg 状态检查

1、查看主库的基本信息

select open_mode,protection_mode,database_role,switchover_status from v$database;

2、查看备库的基本信息

select open_mode,protection_mode,database_role,switchover_status from v$database;

3、查看同步情况

(1)检查实例状态是否一致

连接到数据库

  show parameter instance_name ;

连接到数据库

 show parameter instance_name ;

(2)检查主备两边的序号

连接到数据库

 select max(sequence#) from v$archived_log;

连接到数据库

 select max(sequence#) from v$archived_log;

(3)备库执行,查看是否有数据未应用

select sequence#,applied from v$archived_log ;

(4)检查备库状态,状态应该为not allowed 

select switchover_status from v$database;

(5)查看备库是否有管理恢复进程(MRP

 ps aux|grep mrp  

 

4、dg主备库切换步骤

主库

SQL> select switchover_status from v$database;

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

SQL> shut immediate

SQL> startup nomount

SQL> alter database mount standby database;

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

 

备库

SQL> select switchover_status from v$database;

SQL> select * from v$version where rownum<2;

SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY; 

SQL> shut immediate

SQL> startup

 

用来check当前主备库差异状态

set line 2000

set pages 2000

select name,open_mode,database_role,switchover_status,PROTECTION_MODE, PROTECTION_LEVEL  from v$database;

SELECT al.thrd "Thread", almax "Last Seq Received", lhmax "Last Seq Applied" FROM (select thread# thrd, MAX(sequence#) almax FROM v$archived_log WHERE resetlogs_change#=(SELECT resetlogs_chan

ge# FROM v$database) GROUP BY thread#) al, (SELECT thread# thrd, MAX(sequence#) lhmax FROM v$log_history WHERE resetlogs_change#=(SELECT resetlogs_change# FROM v$database) GROUP BY thread#) l

h WHERE al.thrd = lh.thrd;

select pid,process,status,blocks,block# from v$managed_standby;

select to_char(SYSDATE,'yyyymmdd hh24:mi:ss') CTIME,NAME,VALUE,DATUM_TIME from V$DATAGUARD_STATS WHERE NAME LIKE '%lag';

 

启动完毕后,返回查看同步情况

 

参考文章:

https://blog.csdn.net/lichangzai/article/details/7979032

https://blog.csdn.net/halley333/article/details/80149984

https://blog.csdn.net/aaaaaaaa2000/article/details/7556741

猜你喜欢

转载自blog.csdn.net/sj349781478/article/details/83069564
今日推荐