上篇我们进行了Oracle Dataguard基础配置部分。同RAC相同,Oracle DG很大一部分工作都是真正执行前的准备过程。本篇继续讨论配置项目。
3、Oracle NET配置
Oracle DG是建立在两个核心技术Redo Transfer和Redo Apply的基础上。Redo Transfer是将日志在Primary和Standby传输的技术,其基础就是Oracle Net配置。
Oracle Net三大配置文件:sqlnet.ora、listener.ora和tnsnames.ora分别起到不同的作用。Tnsnames.ora负责记录本地连接名,从primary到standby,从standby到primary,连接都是从tnsnames.ora进行配置。
所以在Primary和Standby端,都要进行互联配置。
[oracle@SimpleLinux admin]$ ls -l
total 24
-rw-r--r--. 1 oracle oinstall345 Apr 13 12:59 listener14041312PM5921.bak
-rw-r--r--. 1 oracle oinstall345 Apr1 13:19 listener.ora
-rw-r--r--. 1 oracle oinstall345 Apr1 13:10 listener.ora.bk
drwxr-xr-x. 2 oracle oinstall 4096 Apr1 12:27 samples
-rw-r--r--. 1 oracle oinstall381 Dec 172012 shrept.lst
-rw-r--r--. 1 oracle oinstall502 Apr 13 13:00 tnsnames.ora
[oracle@SimpleLinux admin]$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORA11GSY=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.88)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora11gsy)
)
)
ORA11G=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.137.88)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora11g)
)
)
之后,listener.ora是负责监听器行为的。监听器动作分为动态注册和静态注册两种方式,理论上只要实例启动(Pmon出现),动态注册动作就会出现。我们就可以在监听器状态中查看到注册信息。
但是,有一个问题需要注意,我们进行duplicate和Redo Transfer的时候,连接都是需要无条件的。当实例在nomount状态时,动态监听状态是restricted限制态,连接是有限制的。所以,就存在一个矛盾。解决这个问题方法,就是放弃动态注册,对Primary和Standby都采用静态注册。
[oracle@SimpleLinux admin]$ cat listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = SimpleLinux)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = ora11g)
(ORACLE_HOME = /u01/app/oracle)
(PROGRAM = extproc)
(GLOBAL_DBNAME = ora11g)
)
(SID_DESC =
(SID_NAME = ora11gsy)
(ORACLE_HOME = /u01/app/oracle)
(GLOBAL_DBNAME = ora11gsy)
)
)
ADR_BASE_LISTENER = /u01/app
监听器启动之后,状态unknown注册信息。
[oracle@SimpleLinux admin]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 13-APR-2014 13:03:52
Copyright (c) 1991, 2013, Oracle.All rights reserved.
(篇幅原因,有省略……)
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=SimpleLinux)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "ora11g" has 1 instance(s).
Instance "ora11g", status UNKNOWN, has 1 handler(s) for this service...
Service "ora11gsy" has 1 instance(s).
Instance "ora11gsy", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
4、密码文件设置
Oracle DG设置有一个要求,就是管理密码(如sys)一致性。在Primary和Standby端,管理密码一定要求是一样的。这个密码的作用在于传递Redo Log过程中进行验证。
在安装DG的时候,比较好一种方法是拷贝Primary库到Standby。
[oracle@SimpleLinux dbs]$ ls -l
total 20
-rw-rw----. 1 oracle oinstall 1544 Apr 13 12:40 hc_ora11g.dat
-rw-r--r--. 1 oracle oinstall 2851 May 152009 init.ora
-rw-r-----. 1 oracle oinstall24 Apr1 12:39 lkORA11G
-rw-r-----. 1 oracle oinstall 1536 Apr1 12:45 orapwora11g
-rw-r-----. 1 oracle oinstall 3584 Apr 13 13:00 spfileora11g.ora
[oracle@SimpleLinux dbs]$ cp orapwora11g orapwora11gsy
[oracle@SimpleLinux dbs]$ ls -l | grep orapw
-rw-r-----. 1 oracle oinstall 1536 Apr1 12:45 orapwora11g
-rw-r-----. 1 oracle oinstall 1536 Apr 13 13:10 orapwora11gsy
5、目录创建
在standby端,我们需要创建一些基本目录。这个时候,可以参考Primary库的参数文件项目,略加修改就可以确定完整的目录列表。
[oracle@SimpleLinux dbs]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Sun Apr 13 13:11:29 2014
Copyright (c) 1982, 2013, Oracle.All rights reserved.
SQL> conn / as sysdba
Connected.
SQL> create pfile from spfile;
File created.
文本格式的参数文件。
[oracle@SimpleLinux dbs]$ cat initora11g.ora
*.audit_file_dest='/u01/app/admin/ora11g/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u01/app/oradata/ORA11G/controlfile/o1_mf_9mnjwpko_.ctl','/u01/app/fast_recovery_area/ORA11G/controlfile/o1_mf_9mnjwpw2_.ctl'
*.db_block_size=8192
*.db_create_file_dest='/u01/app/oradata'
*.db_domain=''
*.db_file_name_convert='ORA11G','ORA11GSY'
*.db_name='ora11g'
*.db_recovery_file_dest='/u01/app/fast_recovery_area'
*.db_recovery_file_dest_size=10485760000
*.diagnostic_dest='/u01/app'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora11gXDB)'
*.log_archive_config='DG_CONFIG=(ora11g,ora11gsy)'
*.log_archive_dest_2='SERVICE=ora11gsy valid_for=(online_logfiles,primary_role) db_unique_name=ora11gsy'
*.log_archive_dest_state_2='ENABLE'
*.log_file_name_convert='ORA11G','ORA11GSY'
*.memory_target=373293056
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
创建目录:
[oracle@SimpleLinux dbs]$ mkdir -p /u01/app/admin/ora11gsy/adump
[oracle@SimpleLinux dbs]$ mkdir -p /u01/app/oradata/ORA11GSY/controlfile/
[oracle@SimpleLinux dbs]$ mkdir -p /u01/app/fast_recovery_area/ORA11GSY/controlfile/
[oracle@SimpleLinux dbs]$ mkdir -p /u01/app/oradata/ORA11GSY/onlinelog/
[oracle@SimpleLinux dbs]$ mkdir -p /u01/app/fast_recovery_area/ORA11GSY/onlinelog/
[oracle@SimpleLinux dbs]$ mkdir -p /u01/app/oradata/ORA11GSY/datafile/
6、启动standby实例
理论上,有参数文件就可以将数据库实例启动到nomount上。我们创建一个简单的参数文件即可。
注意:启动实例名称是通过环境变量ORACLE_SID来定位。
[oracle@SimpleLinux dbs]$ cat initora11gsy.ora
db_name=ora11gsy
[oracle@SimpleLinux dbs]$ export ORACLE_SID=ora11gsy
指定pfile启动standby实例到nomount。
[oracle@SimpleLinux dbs]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.4.0 Production on Sun Apr 13 13:22:33 2014
Copyright (c) 1982, 2013, Oracle.All rights reserved.
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup nomount pfile=initora11gsy.ora
ORACLE instance started.
Total System Global Area150654976 bytes
Fixed Size1363216 bytes
Variable Size96469744 bytes
Database Buffers50331648 bytes
Redo Buffers2490368 bytes
确定实例进程pmon启动。
[oracle@SimpleLinux dbs]$ ps -ef | grep pmon
oracle169210 12:38 ?00:00:01 ora_pmon_ora11g
oracle256710 13:26 ?00:00:00 ora_pmon_ora11gsy
oracle261424040 13:27 pts/000:00:00 grep pmon
下面,就可以通过RMAN开始duplicate standby过程了。