Data Guard 环境:
操作系统: redhat 5
Primary数据库:
IP地址:192.168.1.221
数据库SID:allmedia
DB_UNIQUE_NAME:orcl_pd
Standby数据库:
IP地址:192.168.1.222
数据库SID:allmedia
DB_UNIQUE_NAME:orcl_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.ora,unix下的格式是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#;