一.环境准备
*数据库SID:orcl
二.开始搭建(主库准备工作)
1.确定主库处理归档模式(主库操作)
SQL> archive log list;
如果不是的话:
SQL> SHUTDOWN
IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE
ARCHIVELOG;
SQL> ALTER DATABASE
OPEN;
2.将Primary端设置为Force Logging(主库操作)
SQL> alter database force logging;
3.创建密钥文件(如果不存在的话 主库操作)
oracle密码文件在windows下默认的位置是$ORACLE_HOME/database目录,默认的文件名是pwdSID.ora。
4. 配置Standby Redo Log(主库操作)
oracle 提供了一些标准的建议如下:
1确保standby redo log 的文件大小与primary 数据库online redo log
文件大小相同。这个很好理解的吧,就是为了接收和应用方便嘛。
2创建适当的日志组,一般而言,standby redo 日志文件组数要比primary 数据库的online redo
日志文件组数至少多一个。Standby redo log 的操作方式与online redo log
几乎一模一样,只不过在创建或删除时需要多指定一个standby 关键字,例如添加:
SQL> alter database add standby logfile group 4
('D:\orcldg\logfile\STANDBYREDO04.LOG') size 50m;
SQL> alter database add standby logfile group 5
('D:\orcldg\logfile\STANDBYREDO05.LOG') size 50m;
SQL> alter database add standby logfile group 6
('D:\orcldg\logfile\STANDBYREDO06.LOG') size 50m;
SQL> alter database add standby logfile group 7
('D:\orcldg\logfile\STANDBYREDO07.LOG') size 50m;
删除也同样简单:
SQL> alter database drop standby logfile group
4;
验证standby redo log 文件组是否成功创建
SQL>SELECTGROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM
V$STANDBY_LOG;
5.创建primary 数据库客户端初始化参数文件
注:主要此处修改项较多,为了方便,我们首先创建并修改pfile,然后再通过pfile
重建spfile,你当然也可以通过alter system set 命令直接修改spfile 内容。
SQL> create pfile='d:\cs.ora’ from spfile;
文件已创建。
下列参数为primary 角色需添加的相关初始化参数:
DB_UNIQUE_NAME='dgprm'
LOG_ARCHIVE_CONFIG='DG_CONFIG=( dgprm,dgstd)'
LOG_ARCHIVE_DEST_1='LOCATION= D:\ARCH
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=
dgprm’
log_archive_dest_2='SERVICE=dgstd LGWR SYNC
AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=dgstd'
LOG_ARCHIVE_DEST_STATE_1='ENABLE'
LOG_ARCHIVE_DEST_STATE_2='ENABLE'
REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
LOG_ARCHIVE_FORMAT=’%t_%s_%r.arc’
以下参数为standby 角色相关的参数,建议在Primary
数据库的初始化参数中也进行设置,这样在role transition后(Primary
转为Standby)也能正常运行:
FAL_CLIENT=' dgprm'
FAL_SERVER='dgstd'
DB_FILE_NAME_CONVERT=
'D:\orcldg\datafile','D:\orcldg\datafile'
LOG_FILE_NAME_CONVERT=
'D:\orcldg\logfile','D:\orcldg\logfile'
STANDBY_FILE_MANAGEMENT=’AUTO’
注意引号内参数不要有多余的空格
6. 通过pfile 重建spfile
SQL> shutdown immediate
SQL> create spfile from pfile='d:\cs.ora';
三.物理备库搭建(备库操作)
1.创建新的OracleService
oradim -NEW -SID orcl -STARTMODE manual
2、创建控制文件(主库操作)
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE
AS 'D:\CONTROL01.CTL';(需要发送备库)
注意哟,控制文件通常需要有多份,你要么手工将上述文件复制几份,要么用命令多创建几个出来。另外,创建完控制文件之后到standby
数据库创建完成这段时间内,要保证primary 数据库不再有结构性的变化(比如增加表空间等等),不然primary 和standby
同步时会有问题。我在创建的时候手工创建了2个,结果到备库启动报错,索性就直接复制CONTROL01.CTL重命名为CONTROL02.CTL了
3、创建初始化参数文件
注:主要此处修改项较多,为了方便,我们首先创建并修改pfile,然后再通过pfile
重建spfile,你当然也可以通过alter system set 命令直接修改spfile 内容。
primary服务器执行(修改后直接复制到备库,直接创建备库的参数文件)
create pfile='d:\dgcs.ora'from spfile;
修改初始化参数文件中的参数(红色字体为需要修改的内容)
DB_NAME=orcl
DB_UNIQUE_NAME=dgstd
LOG_ARCHIVE_CONFIG='DG_CONFIG=(dgprm,dgstd)'
CONTROL_FILES=
'D:\orcldg\ctrfile\CONTROL01.CTL','D:\orcldg\ctrfile\CONTROL02.CTL'
DB_FILE_NAME_CONVERT=' D:\orcldg\datafile ','
D:\orcldg\datafile '
LOG_FILE_NAME_CONVERT=' D:\orcldg\logfile ','
D:\orcldg\logfile '
LOG_ARCHIVE_FORMAT='ARC%S_%R.%T'
LOG_ARCHIVE_DEST_1='LOCATION=d:\archVALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=dgstd'
LOG_ARCHIVE_DEST_2=
'SERVICE=dgprm
LGWR SYNC AFFIRMVALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=dgprm'
LOG_ARCHIVE_DEST_STATE_1='ENABLE'
LOG_ARCHIVE_DEST_STATE_2='ENABLE'
REMOTE_LOGIN_PASSWORDFILE='EXCLUSIVE'
STANDBY_FILE_MANAGEMENT='AUTO'
FAL_CLIENT='dgstd'
FAL_SERVER='dgprm'
这些是备库的参数文件 只是在主库上创建而已
注意:上面列举的这些参数仅只是对于primary/standby
两角色可能会相关的参数,还有一些基础性参
数比如*_dest,*_size
等数据库相关的参数在具体配置时也需要根据实际情况做出适当修改。
4、复制文件到standby 服务器
注意需要复制所有数据文件,备份的控制文件及客户端初始化参数文件,密钥文件都复制到和主库相同的目录下面
注意控制文件是语句创建的备库控制文件,而不是主库的控制文件
5. 配置listener 及net service names(方式多样,不详述)。
Standby
服务器和primary服务器都需要配置,一个监听,两个服务名(pri,std),服务名要使用dedicate模式(SERVER =
DEDICATED)
监听 例如:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC
=
(SID_NAME = CLRExtProc)
(ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS =
"EXTPROC_DLLS=ONLY:D:\app\Administrator\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
(SID_DESC
=
(global_dbname = ORCL)
(ORACLE_HOME =
D:\app\Administrator\product\11.2.0\dbhome_1)
(sid_name=orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = WIN-DGPRM)(PORT = 1521))
(ADDRESS =
(PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = D:\app\Administrator
6. 通过该pfile 创建spfile
create spfile from pfile='d:\stdcs.ora';上列3中修改的文件
7.启动standby
注意哟,咱们前面说过的,物理standby 极少情况下可以以read-write
模式打开,某些情况下可以以readonly模式打开,所以默认情况下,加载到mount 状态即可,11G可以打开数据库。
SQL> STARTUP;
8 启动日志实时应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING
CURRENTLOGFILE DISCONNECT FROM SESSION;
提示:disconnectfromsession子句并非必须,该子句用于指定启动完应用后自动退出到命令操作符前,如果不指定的话,当前session
就会一直停留处理redo 应用,如果想做其它操作,就只能新建一个连接。
9.查看同步情况
9.1 连接到primary 数据库,查询已经存在的归档日志文件。
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME
FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
9.2 连接到standby 数据库,查询已经存在的归档日志文件。
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM
V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------ ------------------
8 11-JUL-07 17:50:45 11-JUL-07 17:50:53
9 11-JUL-07 17:50:53 11-JUL-07 17:50:58
10 11-JUL-07 17:50:58 11-JUL-07 17:51:03
3 rows selected.
9.3 在primary服务器,执行ALTER SYSTEM SWITCH LOGFILE 语句进行日志切换
SQL> ALTER SYSTEM SWITCH LOGFILE;
9.4,在standby 服务器上校验新的日志是否归档
SQL> SELECT SEQUENCE#, FIRST_TIME,
NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY
SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------ ------------------
8 11-JUL-07 17:50:45 11-JUL-07 17:50:53
9 11-JUL-07 17:50:53 11-JUL-07 17:50:58
10 11-JUL-07 17:50:58 11-JUL-07 17:51:03
11 11-JUL-07 17:51:03 11-JUL-07 18:34:11
4 rows selected.
9.5 在standby 服务器上校验新的重做日志是否被应用
SQL> SELECT SEQUENCE#,APPLIED FROM
V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# APP
--------- ---
8 YES
9 YES
10 YES
11 IN-MEMORY
提示:APPLIED 列值为YES 或 IN-MEMORY
表明对应的归档日志已经被应用