经过近一个月的折腾,DataGuard终于配置成功,感触颇多。第一是一定要仔细研读数据卫士的原理文章,深刻理解,这样在配置过程中就不容易出错。第二是,配置参数众多,仔细配置,错了一个可能就导致备用数据库无法有效运转。第三就是建议刚刚接触Oracle的同志们,一定要好好学习配置数据卫士的过程,在配置过程中不怕出错,解决问题的过程也是学习Oracle的过程,通过这段时间的配置,学习,熟悉了许多Oracle的主要知识,觉得长进了不少,下面我就详细的说明一下配置过程以及需要注意的事项。
主,备数据库的平台环境介绍
主数据库的说明
主机名:wy IP地址:172.16.3.4 Oracle_sid=orcl Dbname=orcl NetService=orcl
备用数据库的说明
主机名:wyoracle IP地址:172.16.3.5 Oracle_sid=stan DbName=stan
NetService=stan
配置过程
以下所有操作在主数据库上实现
1. 启用数据库的强制日志记录:
SQL>Alter database force logging;
2.检查密码文件,创建备用库的密码文件
在DoS界面下敲入:C:\>orapwd
file=D:\Oracle\product\10.1.0\db_1\database\PWDstan.ora
password=comein entries=2
3.配置备用数据库重做日志
1) 确定重做日志文件的大小应与当前主数据库在线重做日志文件大小匹配,可使用下面的命令确认在线重做日志文件的大小:
SQL>select bytes from v$log;
说明:安装数据库时默认大小为10M;
2)创建备用重做日志文件组:
数据库有默认3个重做日志文件组,使用下面的命令创建4个备用重做日志文件组:
alter database add standby LOGFILE GROUP
4('C:\oracle\product\10.1.0\oradata\Orcl\redo04.log') size
10m;
alter database add standby LOGFILE GROUP
5('C:\oracle\product\10.1.0\oradata\Orcl\redo05.log') size
10m;
alter database add standby LOGFILE GROUP
6('C:\oracle\product\10.1.0\oradata\Orcl\redo06.log') size
10m;
alter database add standby LOGFILE GROUP
7('C:\oracle\product\10.1.0\oradata\Orcl\redo07.log') size 10m;
3)确定是否创建成功
SQL>select * from v$standby_log;
4启用归档
SQL>shutdown immediate:
SQL>startup mount;
SQL>alter database archivelog;
SQL>alter database open;
SQL>archive log list:
说明一点:在我shutdown immediate后,重新startup
mount时,会提示什么监听器错误,这是Oracle的一个bug,我们可退出Oracle,重新进入Dos界面,再行startup
mount就可避免以上错误。
5.创建主数据库初始化参数:(最为关键的一步,一定要看好各项参数,错了一个都可导致备用数据库无法正常运转)
1) SQL>Create
pfile=’c:\pfileOrcl.ora’ from spfile;
到相应目录下找到此文件,用文本编辑器打开,编辑相关参数,参数编辑如下:
*.background_dump_dest='F:\oracle\product\10.1.0\admin\orcl\bdump'
*.compatible='10.1.0.2.0'
*.control_files='F:\oracle\product\10.1.0\oradata\orcl\control01.ctl','F:\oracle\product\10.1.0\oradata\orcl\control02.ctl','F:\oracle\product\10.1.0\oradata\orcl\control03.ctl'
*.core_dump_dest='F:\oracle\product\10.1.0\admin\orcl\cdump'
*.db_block_size=8192
*.db_cache_size=25165824
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest='F:\oracle\product\10.1.0\flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.java_pool_size=50331648
*.job_queue_processes=10
*.large_pool_size=8388608
*.log_archive_format='ARC%S_%R.%T'
*.open_cursors=300
*.pga_aggregate_target=25165824
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_pool_size=83886080
*.sort_area_size=65536
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='F:\oracle\product\10.1.0\admin\orcl\udump'
以下是我们要加入的参数:
*.DB_UNIQUE_NAME='orcl'
*.log_archive_config=
'DG_CONFIG=(orcl,stan)'
*.log_archive_dest_1=
'location=F:\oracle\product\10.1.0\flash_recovery_area\orcl\ARCHIVELOG
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=orcl'
*.log_archive_dest_2=
'SERVICE=stan LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=Stan'
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
*.STANDBY_FILE_MANAGEMENT=AUTO
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER='orcl'
*.FAL_CLIENT='Stan'
*.DB_FILE_NAME_CONVERT='F:\oracle\product\10.1.0\oradata\orcl','F:\oracle\product\10.1.0\oradata\stan'
*.LOG_FILE_NAME_CONVERT='F:\oracle\product\10.1.0\oradata\orcl','F:\oracle\product\10.1.0\oradata\stan'
稍微说明一下吧:DB_FILE_NAME_CONVERT参数前为主库,后为备用数据库,LOG_FILE_NAME_CONVERT设置方法如上。不管目录是否一样,一定要设置目录转换参数,网上也有说,这是Oracle
10g的一个bug。
修改后保存。
SQL>startup nomount pfile=’c:\pfileOrcl.ora’
SQL>create spfile from
pfile=’c:\pfileOrcl.ora’;
SQL>shutdown immediate;
SQL>Startup;
6.配置主数据库的listener和tnsname文件
稍微介绍一下Oracle的listener吧,listener负责监听本从网络上来的数据库连接要求,第一它会确定连接请求是不是本主机的,然后再查询连接的数据库SID。而tnsname文件的作用是确定解析网络服务名,而不用我们每次还要敲入一大段连接描述符,比如说描述连接数据库的主机名拉,用的是什么协议啦等等,只用@服务名
就可轻松搞定,我倒是建议大家用Oracle的Net
Manager进行配置,轻松简单,还不容易出错,我这里还是把Listener和tnsname文本文件内容贴出来吧,也是供自己日后查询使用:
Listener:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC
=
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.1.0\Db_2)
(PROGRAM = extproc)
)
(SID_DESC
=
(GLOBAL_DBNAME = orcl)
(SID_NAME = ORCL)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ccws-45b59aca17)(PORT =
1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =
ccws-45b59aca17)(PORT = 1522))
)
)
Tnsnames:
ORCL=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = wy)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
stan =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = wyoracle)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = stan)
)
)
7.创建备用数据库的控制文件
SQL>shutdown immediate:
SQL>startup mount:
SQL>alter database create standby controlfile as
‘c:\stan.ctl’
SQL>shutdown immediate:
注意:此刻先不要启动数据库,不然的话contrilfile中记录的参数就会和拷贝出的数据文件对不上,导致备用数据库启动失败,从而要求Media
Recover。
此时我们将视线转到备用数据库服务器所在的主机上,备用数据库主机
1.
在备用主机上安装Oracle软件,请注意不要安装启动数据库。
2.
准备,建立相应的目录
1) 建立 F:\oracle\product\10.1.0\flash_recovery_area\stan\ARCHIVELOG
2) 建立 F:\oracle\product\10.1.0\oradata\stan
3) 创建目录adump,bdump,cdump,udump
目录:C:\oracle\product\10.1.0\admin\stan 下建立以上目录
3.拷贝主数据库的相应文件到备用数据库上
1)拷贝主数据库上的所有数据文件到备用数据库上 F:\oracle\product\10.1.0\oradata\stan上
2)拷贝主数据库上的控制文件stan.ctl到备用数据库上
F:\oracle\product\10.1.0\oradata\stan上,并改名为control01.ctl,control02.ctl,control03.ctl,删除掉原来拷贝的控制文件。
3)拷贝主数据库的密码文件到备用服务器上:路径为:F:\oracle\product\10.1.0\Db_2\database
将名称改为pwdstan.ora 备用数据库的相应目录
4.在Windows上创建一个服务:
DoS界面下:oradim –new –sid stan –startmode manual
5.配置备用数据库的监听器和tnsnames文件
Listener:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC
=
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.1.0\Db_2)
(PROGRAM = extproc)
)
(SID_DESC
=
(GLOBAL_DBNAME = orcl)
(SID_NAME = stan)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = wyoracle)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = wyoracle)(PORT
= 1522))
)
)
Tnsnames:
ORCL=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = wy)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
stan =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = wyoracle)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = stan)
)
)
在主数据库和备用数据库的DoS界面下分别
Tnsping orcl
Tnsping stan
看能否Ping通对方的数据库,Ping通则说明配置成功。
此外,配置监听器后:
Lsnrctl stop
Lsnrctl start
6.配置备用数据库的启动文件
建立stan.ora
*.background_dump_dest='F:\oracle\product\10.1.0\admin\stan\bdump'
*.compatible='10.1.0.2.0'
*.control_files='F:\oracle\product\10.1.0\oradata\stan\control01.ctl','F:\oracle\product\10.1.0\oradata\stan\control02.ctl','F:\oracle\product\10.1.0\oradata\stan\control03.ctl'
*.core_dump_dest='F:\oracle\product\10.1.0\admin\stan\cdump'
*.db_block_size=8192
*.db_cache_size=25165824
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='orcl'
*.db_recovery_file_dest='F:\oracle\product\10.1.0\flash_recovery_area'
*.db_recovery_file_dest_size=2147483648
*.dispatchers='(PROTOCOL=TCP) (SERVICE=stanXDB)'
*.java_pool_size=50331648
*.job_queue_processes=10
*.large_pool_size=8388608
*.log_archive_format='ARC%S_%R.%T'
*.open_cursors=300
*.pga_aggregate_target=25165824
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.shared_pool_size=83886080
*.sort_area_size=65536
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='F:\oracle\product\10.1.0\admin\stan\udump'
*.DB_UNIQUE_NAME='stan'
*.log_archive_config=
'DG_CONFIG=(orcl,stan)'
*.log_archive_dest_1=
'location=F:\oracle\product\10.1.0\flash_recovery_area\standby\ARCHIVELOG\
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=stan'
*.log_archive_dest_2=
'SERVICE=orcl LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=orcl'
*.LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
*.STANDBY_FILE_MANAGEMENT=AUTO
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_SERVER='orcl'
*.FAL_CLIENT='Stan'
*.DB_FILE_NAME_CONVERT='F:\oracle\product\10.1.0\oradata\orcl','F:\oracle\product\10.1.0\oradata\stan'
*.LOG_FILE_NAME_CONVERT='F:\oracle\product\10.1.0\oradata\orcl','F:\oracle\product\10.1.0\oradata\stan'
注意:DB_Name=Orcl
DB_UNIQUE_NAME=’Stan’ 备用数据库的名称
7.启动主数据库 startup
8.启动备用数据库
SQL>startup nomount pfile=’c:\stan.ora’
SQL>Create spfile from pfile=’c:\stan.ora’
SQL>shutdown immediate;
SQL>Startup mount;
9.开始应用重做日志
1) 在备用数据库上:
SQL>Alter database recover managed standby
database disconnect from session;
2) 在主数据库上:
强制日志切换,这样才能归档日志,并传到备用数据库上
SQL>Alter system switch logfile;
10.验证备用数据库配置成功:
SQL>select sequence#,first_time,next_time from
v$archived_log;
如有选定的行,则说明配置成功。
11.可以将备用数据库启动到只读模式,验证配置成功。
说明:物理备用数据库,不会自动应用归档日志。只有逻辑备用数据库才会自动应用日志。在修改只读模式后,还要shutdown
数据库,并启动到应用重做日志。