[Oracle] Data Guard系列(4) - 在不停主库的情况下创建物理备库
今天需要对一个24*7的生产库创建一个DG的物理备库,要求主库不能停机,一开始以为不可能,后来查了下文档,原来通过rman的duplicate命令可以实现在线创建物理备库。
主备库的信息如下:
角色 db_name db_unique_name 主机 网络连接字符串
主库 jkka jkka lx32 jkkapri
备库 jkka jkka2 lx201 jkkasta
1.主库的准备工作
1)确认主库已开启归档和force logging
DG要求主库一定要开启归档和force logging,可以通过以下语句查询:
[sql]
SYS@JKKA>select log_mode,force_logging from v$database;
LOG_MODE FOR
------------ ---
ARCHIVELOG NO
从上面我们发现主库已经开启了归档,但没有开启force logging,可以通过以下语句开启:
[sql]
SYS@JKKA>alter database force logging;
Database altered.
2)创建主库密码文件
主备库间需要通过密码文件互相通讯,我们先在主库端创建密码文件,之后再把它同步到备库中:
[plain]
$ orapwd file=$ORACLE_HOME/dbs/orapwjkka
确认参数remote_login_passwordfile为EXCLUSIVE(默认值):
[sql]
SYS@JKKA>show parameter remote_login_passwordfile
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile string EXCLUSIVE
通过v$pwfile_users再次确认sys用户在密码文件中:
[sql]
SYS@JKKA>select * from v$pwfile_users;
USERNAME SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS TRUE TRUE FALSE
3)配置主库参数
首先,查看主库的db_name和db_unique_name:
[sql]
SYS@JKKA>show parameter db_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_name string jkka
SYS@JKKA>show parameter db_unique_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_unique_name string jkka
接着,修改log_acchive_config参数,在dg_config属性分别写上主备库的db_unique_name:
[sql]
SYS@JKKA>alter system set log_archive_config='DG_CONFIG=(jkka,jkka2)';
System altered.
配置log_archive_dest_1写入本地目录:
[sql]
SYS@JKKA>alter system set log_archive_dest_1='location=/data/oradata/jkka/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=jkka';
System altered.
SYS@JKKA>alter system set log_archive_dest_state_1=enable;
System altered.
配置log_archive_dest_2写入远程目录,因为这时候还没有备库,所有这里我们暂时把log_archive_dest_state_2设为defer:
[sql]
SYS@JKKA>alter system set log_archive_dest_state_2=defer;
System altered.
SYS@JKKA>alter system set log_archive_dest_2='service=jkkasta ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=jkka2';
System altered.
下面这些参数是可选的,只有当主库切换成备库时有效,但强烈建议配置,否则以后主备库切换会失败。
[sql]
SYS@JKKA>alter system set fal_server=jkka2;
System altered.
SYS@JKKA>alter system set fal_client=jkka;
System altered.
SYS@JKKA>alter system set standby_file_management=auto;
System altered.
最后创建pfile
[sql]
SYS@JKKA>create pfile from spfile;
File created.
2.启动备库实例
1)安装数据库软件
安装Oracle软件这里就不再累述,要注意的一点是备库的版本要和主库的一样。(注意:这里的版本包括小版本也要一样,比如主库是11.2.0.1,备库时11.2.0.3就不行)
2)创建备库的参数文件
备库的参数文件可以根据主库的参数文件适当修改即可,在之前我们已经生成了主库的pfile,所有我们只要把它拷贝到备库,然后修改以下参数:
[plain]
db_unique_name='jkka2'
fal_client='JKKA2'
fal_server='JKKA'
log_archive_dest_1='location=/data/oradata/jkka/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=jkka2'
log_archive_dest_2='service=jkkapri ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=jkka'
3)拷贝主库的密码文件至备库
4)在备库上创建和主库一模一样的目录结构
需要创建的目录有日志文件、控制文件、数据文件、归档日志、audit目录等。
5)启动备库至nomount状态
[sql]
$ export ORACLE_SID=jkka
$ sqlplus / as sysdba
SQL>startup nomount
4. 主备库的网络设置
1)主库的易做图设置
[plain]
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = lx32)(PORT = 1521))
)
)
2)备库的易做图设置
[plain]
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =