oracle datagaurd 搭建实验

Data Guard 环境:

操作系统: redhat 5

Primary数据库:

IP地址:192.168.1.221

数据库SID:allmedia

DB_UNIQUE_NAMEorcl_pd

 

Standby数据库:

IP地址:192.168.1.222

数据库SID:allmedia

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.配置监听

在netca中配置,将主备服务器上的监听都启动,配置网络服务名时,选择数据库名要填入数据库DB_UNIQUE_NAME的值。

/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora   里的配置

ORCL_ST =

  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.222)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl_st)
    )
  )
ORCL_PD =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.221)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl_pd)
    )
  )

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

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

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

[oracle@localhost dbs]$ orapwd file=/app/oracle/product/10.2.0/db_1/dbs/orapwallmedia password=allmedia

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

6. 修改初始化参数文件

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

并修改此文件

 

 

添加:

*.db_name='allmedia'                     ——此项主备库都填数据库SID

*.DB_UNIQUE_NAME='orcl_pd'               ——各自为主备库取一个唯一的名字 

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_pd,orcl_st)'  ——此处为主备服务器unique_name
*.LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl_pd'    

//LOCATION标示 当作为主数据库时,表示数据库产生的redo文件存放在此路径,当作为备用数据库时,表示从主数据库上传送来的redo文件放在路径上。

*.LOG_ARCHIVE_DEST_2='service=orcl_st DB_UNIQUE_NAME=orcl_st'  

//其中的service 值为备用库的网络服务名将redo日志传送到备用服务器上,存放路径是备用服务器上配置的*.LOG_ARCHIVE_DEST_1='LOCATION  值

*.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' 

 

 

 

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

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup pfile='/home/oracle/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='/home/oracle/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过来的控制文件再复制三份就可以了。

在主库上操作:

拷贝密码文件

 

[oracle@orcl_pd admin]$ cd $ORACLE_HOME/dbs
[oracle@orcl_pd dbs]$ scp orapwallmedia 192.168.1.222:/app/oracle/product/11.2.0/dbhome_1/dbs/ 

拷贝控制文件(此控制文件是之前创建的备用库控制文件 /home/oracle/control.01 去覆盖备用库的控制文件)

拷贝参数文件(/home/oracle/initallmedia.ora,拷贝到备库上 :/app/oracle/product/11.2.0/dbhome_1/dbs/下)

拷贝/app/oracle/oradata/allmedia 到备库同样目录下,备库之前的数据文件先删除)

 

3. 修改备库初始化参数文件

vi /app/oracle/product/11.2.0/dbhome_1/dbs/initallmedia.ora

添加

*.DB_UNIQUE_NAME='orcl_st'

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl_pd,orcl_st)'
*.LOG_ARCHIVE_DEST_1='LOCATION=/home/oracle/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' 

 

4.备库创建监听和网络服务名,和主库一样。

 

5

SQL> startup mount pfile='/app/oracle/product/11.2.0/dbhome_1/dbs/initallmedia.ora'

ORACLE instance started.

SQL> create spfile from pfile='/app/oracle/product/11.2.0/dbhome_1/dbs/initallmedia.ora';

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

在备用数据库上启动和装配数据库

startup nomount

alter database mount standby database ; 

启动redo实时应用

SQL>alter database recover managed standby database using current logfile disconnect from session;

验证备用数据库是否运行正常

1.查看备用数据库现有的redo日志文件:

select sequence#,next_time from v$archived_log order by sequence#;

2.强制切换当前在线日志,在主数据库上:

alter system switch logfile;

3.在备用服务器上查看日志是否已传送过来

select sequence#,first_time,next_time from v$archived_log order by sequence#;

4.查看日志是否被应用

select sequence#,applied from  v$archived_log order by sequence#;