现在的位置: 首页 > 综合 > 正文

Oracle Data Guard Linux 平台 Physical Standby 搭建实例

2012年05月06日 ⁄ 综合 ⁄ 共 8417字 ⁄ 字号 评论关闭

Data Guard 环境:

操作系统: redhat 4.7 

Primary数据库:

IP地址:10.85.10.1

数据库SIDorcl

DB_UNIQUE_NAMEorcl_pd

 

Standby数据库:

IP地址:10.85.10.2

数据库SIDorcl

DB_UNIQUE_NAMEorcl_st

 

 

 

一. Primary 端的配置

 

1.  主库设置为force logging 模式

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. 添加redo log file

添加一个新的Standby Redologs组(注意组号不要与当前存在的Online Redologs组重复),并为该组指定一个成员:

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/app/oracle/oradata/orcl/redo04.log') size 50M; 

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/app/oracle/oradata/orcl/redo05.log') size 50M; 

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/app/oracle/oradata/orcl/redo06.log') size 50M; 

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/u01/app/oracle/oradata/orcl/redo07.log') size 50M; 


4. 修改listener.ora tnsnames.ora 文件

 

Listener.ora 文件:

 

SID_LIST_LISTENER =

  (SID_LIST =

    (SID_DESC =

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

      (PROGRAM = extproc)

    )

(SID_DESC =

(GLOBAL_DBNAME = orcl)

(ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)

        (SID_NAME = orcl)  

    )

  )

 

LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))

      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))

    )

  )

 

注意:SID_LIST_LISTENER 配置的是静态注册,如果没有该参数,而且Data Guard 启动顺序又不正确,那么在主库可能会报 PING[ARC1]: Heartbeat failed to connect to standby 'orcl_st'. Error is 12514. 错误,导致归档无法完成。

 

Oracle Listener 动态注册 与 静态注册

http://blog.csdn.net/tianlesoftware/archive/2010/04/30/5543166.aspx

Tnsnames.ora 文件

ORCL_ST =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

(SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

 

ORCL_PD =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

          (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )


5. 创建备库的密码文件和控制文件

SQL> alter database create standby controlfile as '/u01/control01.ctl';

-- 说明: 判断一个数据库是Primary还是Standby,就是通过控制文件来判断的。

[oracle@localhost dbs]$ orapwd file=/u01/app/oracle/product/10.2.0/db_1/dbs/orapworcl password=admin

如果已经存在,就不用创建了。 缺省情况下,win下口令文件的格式是pwdsid.oraunix下的格式是orapwSID(大小写敏感)

 

6. 修改初始化参数文件

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

 

在initorcl.ora 添加如下内容:


####主库参数######
*.DB_NAME ='orcl';
#--监听中配置的
*.DB_UNIQUE_NAME='orcl_pd'  
#--列出DG中所有DB_UNIQUE_NAME
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_pd,orcl_st)' 
*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_pd'
*.LOG_ARCHIVE_DEST_2='service=orcl_st DB_UNIQUE_NAME=orcl_st'


*.LOG_ARCHIVE_DEST_STATE_1=ENABLE 
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE 
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
#####备库参数#######
*.FAL_SERVER=orcl_st
*.FAL_CLIENT=orcl_pd
*.standby_file_management='AUTO'  
*.standby_archive_dest='/u01/archive'
#如果主备库目录不同,还需要添加:
#*.log_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'
#*.db_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'

 

 

-- 注意:orcl_st,orcl_pd 是在tnsnames文件中配置的

 

'/u01/initorcl.ora' 这个pfile 启动数据库,并生成spfile

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup pfile='/u01/initorcl.ora';

ORACLE instance started.

Total System Global Area  167772160 bytes

Fixed Size                  1218316 bytes

Variable Size              79694068 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

Database mounted.

Database opened.

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

File created.

 

 

二. Standby 端配置

 

 1. 创建备库存放数据文件和后台跟踪目录, 这个目录可以和主库相同, 如果不同,就需要在主库的初始化文件中进行转换。 

如:

*.log_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'

*.db_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'

 

   $ORACLE_BASE/ORADATA/ORCL 

   $ORACLE_BASE/admin/orcl 

   $ORACLE_BASE/admin/orcl/adump 

   $ORACLE_BASE/admin/orcl/bdump 

   $ORACLE_BASE/admin/orcl/cdump 

   $ORACLE_BASE/admin/orcl/dpdump 

   $ORACLE_BASE/admin/orcl/pfile 

   $ORACLE_BASE/admin/orcl/udump 

   $ORACLE_BASE/admin/orcl/ 

 

2. 将主库的密码文件,控制文件,数据文件,参数文件,日志文件copy到备库。 

说明一点,这个控制文件是我们自己创建的standby 控制文件。将copy过来的控制文件再复制三份就可以了。  主备的控制文件是不一样的。  这里除了采用直接copy 文件之外,还可以采用Rman 恢复来做。 直接copy 需要停数据库,如果采用RMAN 的话,就不需要停机了。 

[oracle@localhost orcl]$ pwd

/u01/app/oracle/oradata/orcl

[oracle@localhost orcl]$ ls

control01.ctl  redo01.log  redo04.log  redo07.log    temp01.dbf

control02.ctl  redo02.log  redo05.log  sysaux01.dbf  undotbs01.dbf

control03.ctl  redo03.log  redo06.log  system01.dbf  users01.dbf

[oracle@localhost orcl]$ scp *.dbf 10.85.10.2://u01/app/oracle/oradata/orcl

[oracle@localhost u01]$ scp *.ctl 10.85.10.2://u01/app/oracle/oradata/orcl

[oracle@localhost u01]$ scp *.log 10.85.10.2://u01/app/oracle/oradata/orcl

[oracle@localhost u01]$ scp initorcl.ora 10.85.10.2://u01/app/oracle/product/10.2.0/db_1/dbs

[oracle@localhost dbs]$ scp orapworcl 10.85.10.2://u01/app/oracle/product/10.2.0/db_1/dbs

 

3. 修改初始化参数文件

修改之后如下:

####主库参数######
*.DB_NAME ='orcl';
#--监听中配置的
*.DB_UNIQUE_NAME='orcl_pd'  
#--列出DG中所有DB_UNIQUE_NAME
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_pd,orcl_st)' 
*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_st'
*.LOG_ARCHIVE_DEST_2='service=orcl_pd DB_UNIQUE_NAME=orcl_pd'


*.LOG_ARCHIVE_DEST_STATE_1=ENABLE 
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE 
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
#####备库参数#######
*.FAL_SERVER=orcl_pd
*.FAL_CLIENT=orcl_st
*.standby_file_management='AUTO'  
*.standby_archive_dest='/u01/archive'
#如果主备库目录不同,还需要添加:
#*.log_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'
#*.db_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'

 

4. 修改listener.ora 和 tnsnames.ora 文件,如果不存在,就从主库上copy 过去。

 

5. 在备库添加redo log file

  如果主库没有添加redo log file,可以先用copy 过来的初始化文件将数据库启动到mount 状态。在创建个spfile,最后添加redo log

SQL> startup mount pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora'

ORACLE instance started.

SQL> create spfile from pfile='/u01/app/oracle/product/10.2.0/db_1/dbs/initorcl.ora';

 

添加一个新的Standby Redologs组(注意组号不要与当前存在的Online Redologs组重复),并为该组指定一个成员:

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 ('/u01/app/oracle/oradata/orcl/redo04.log') size 50M; 

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 ('/u01/app/oracle/oradata/orcl/redo05.log') size 50M; 

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 ('/u01/app/oracle/oradata/orcl/redo06.log') size 50M; 

SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 7 ('/u01/app/oracle/oradata/orcl/redo07.log') size 50M; 

 

提示,由于从Primary数据库复制文件时并没有复制Online Redologs,因此物理Standby数据库在第一次启动REDO应用时,会在Alert文件中报Online Redo Logfile文件不存在,没有关系,物理Standby会自动重建这批文件,同时你也不用担心会丢失数据,Online Redologs中的数据会以归档文件的形式从Primary端接收。

 

 

至此,Data Guard 的操作已经完成,下面来开始验证。

 

 

注意Data Guard 启动顺序:

启动顺序:先standby ,primary;
       关闭顺序:先primary standby;

 

 

在备库将实例启动到mount 状态

SQL> startup nomount;

SQL>alter database mount standby database ; 

SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 

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

 

在备库启动监听:

$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 搭建结束。

 

 

 

注意:如果在主库执行 alter database clear unarchived logfilealter database open resetlogs , dataguard要重建

 

 

 

 

三. 一些其他操作 

 

1. 首先查看当前的保护模式   ---primary数据库操作

SQL> select protection_mode,protection_level from v$database;

PROTECTION_MODE      PROTECTION_LEVEL

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

MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

 

2. 设置新的数据保护模式并重启数据库    --primary数据库操作

 

当保护模式更改顺序:

maximize protection --->  maximize availability ----> maximize performance

当在把dataguard的保护级别按这上面的顺序减低的时候, 不需要primary库在mount状态,否则primary 必须在mount 状态。 

 

如:
SQL>  alter database set standby database to maximize availability;

 alter database set standby database to maximize availability

*

ERROR at line 1:

ORA-01126: database must be mounted in this instance and not open in any

instance

 

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

 

Total System Global Area  167772160 bytes

Fixed Size                  1218316 bytes

Variable Size              79694068 bytes

Database Buffers           83886080 bytes

Redo Buffers                2973696 bytes

抱歉!评论已关闭.