在一个机器上建立standby database 的经历

环境:
CPU:PII233
OS : RedHat Linux 6.22
ORACLE: Oracle8.1.6.0.0 for Linux

=============Primary database=====================
oracle主目录在 /home/oracle/OraHome1
sid = pdb
数据文件在 /u01/oradata/pdb
归档重做日志文件在/u01/oradata/arch

=============Standy database ====================
oracle主目录在 /home/oracle/OraHome1
sid = sdb
数据文件在 /u02/stdby
归档重做日志文件在/u02/arc_dest


建立步骤:
1. 建立dba组和oracle用户,并修改其.bash_profile

2. 以oracle用户身份安装 RH linux6.22 和 Oracle 8.1.6EE,SID为PDB;

3. 将所有primary DB中所有的datafile做一个备份,以便以后传输到standby database中:
SQL>conn / as sysdba
SQL>select name from v$datafile;(我的primary DB数据文件在 /u01/oradata/pdb目录中)
SQL>shutdown immediate
$cp /u01/oradata/pdb/*.dbf /u01bak/oradata/pdb/

4. 创建standby DB的控制文件
$SQLPLUS "/ AS SYSDBA"
SQL>startup
SQL>alter database create standby controlfile as '/u01bak/oradata/pdb/control01.ctl';

5. 建立standby DB用户-------standby,并修改其.bash_profile
(我总怕搞混淆了,所以从这开始我开启了两个终端,约定oracle登陆的终端为tty1,standby登陆的终端为tty2)

6. 在tty2,用root身份将/u01 、/u02 、/home/oracle设置为全部可读可写可执行的方式,并设定相应的属主
(我觉得干脆、彻底*^-^*,此方法仅供参考,尤其是在公司中的用途时还应考虑安全问题)
$chmod -R 777 /u01
$chmod -R 777 /u02
$chmod -R 777 /home/oracle
$chgrp -R dba /u01
$chgrp -R dba /u02
$chown -R oracle /u01
$chown -R standby /u02


7. 在tty2,将standby DB需要的control file 和 数据文件传送到预先设计好的目录
$cp /u01bak/oradata/pdb/control01.ctl /u02/stdby
$cp /u01bak/oradata/pdb/*.dbf /u02/stdby
以root执行:$chown -R standby /u02

8. 配置listener.ora
加入如下的standby DB监听器slistener:
SLISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = lunar)(PORT = 1512))------------区别于primary db的端口1521
)
)
)

SID_LIST_SLISTENER =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME = /home/oracle/OraHome1)
(SID_NAME = SDB)-------必须与参数文件中的INSTANCE_NAME一致
)
)

9. 配置tnsnames.ora
加入如下监听SDB:
SDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = lunar)(PORT = 1512))
)
(CONNECT_DATA =
(SID = sdb)-----------与slistener.ora中的SID_NAME一致,即必须与参数文件中的INSTANCE_NAME一致,主要是8i以前的版本用
(SERVER=DEDICATED)
(GLOBAL_NAME=sdb)------------与参数文件中的service_names一致,sid和global_name两者设置一个就可以了
)
)


10. 测试监听器
在tty1,让oracle测试默认的监听器(监听primary DB)的启动和状态
$lsnrctl
LSNRCTL>stop
LSNRCTL>start (或start listener)

在tty2,让standby测试standby DB的启动和状态
$lsnrctl
LSNRCTL>start slistener
***注意,修改了listener.ora后,要想让它生效需要重新启动监听,或者用reload命令


11. 在tty1,修改primary DB的参数文件
修改时注意这些就好了:
db_name = "pdb" ***************standby DB将与之的一致
instance_name = PDB ************listener.ora文件的listener监听器的SID_NAME将与之一致
service_names = pdb ************tnsnames.ora文件的pdb监听的GLOBAL_NAME将与之一致
control_files = ("/u01/oradata/pdb/control01.ctl", "/u01/oradata/pdb/control02.ctl", "/u01/oradata/pdb/control03.ctl")
log_archive_start = true
log_archive_dest_1 = "location=/u01/oradata/arch MANDATORY REOPEN=60" ********归档到本地的目的地
log_archive_dest_state_1 = ENABLE ******显示说明(确定)可以归档到这个路径
log_archive_dest_2 = "SERVICE=sdb OPTIONAL REOPEN=180" *********standby db 的service name
log_archive_dest_state_2 = ENABLE
log_archive_format = arch_%t_%s.arc
compatible = "8.0.5"***************standby DB将与之的一致

**注意log_archive_dest_n和location、SERVICE关键字一同使用




12. 在tty2,将primary DB的参数文件copy到/u02/stdby,并修改它
(可以自行设置copy到哪里,如果copy到$ORACLE_HOME/dbs中或在这个位置建立一个该文件的link,每次启动时就不用pfile参数)
$cp /home/oracle/OraHome1/admin/pdb/pfile/initPDB.ora /u02/stdby/initSDB.ora
修改时注意这些就好了:
db_name = "pdb"***************必须与primary DB一致
instance_name = SDB************listener.ora文件的slistener监听器的SID_NAME将与之一致
service_names = SDB************tnsnames.ora文件的sdb监听的GLOBAL_NAME将与之一致
control_files = ("/u02/stdby/control01.ctl")********注意修改standby DB的control file的位置
log_archive_start = true
log_archive_dest_1 = "LOCATION=/u02/arc_dest" ****************因为缺省时,standby db在LOG_ARCH_DEST_1 目录中查找归档重做日志,所以应该设置LOG_ARCH_DEST_1 与STANDBY_ARCH_DEST 的值相同。
standby_archive_dest = "/u02/arc_dest"**********来自primary db的archive log file将传送并写入到这个位置。
log_archive_dest_state_1 = ENABLE
log_archive_format = arch_%t_%s.arc
db_file_name_convert = ("/u01/oradata/pdb","/u02/stdby")*********将primary db 的datafile的位置重命名到standby db的datafile的位置,oracle document说如果这个不成功,应当手工重命名standby db 的datafile的文字,不过我没试过,呵呵
log_file_name_convert = ("/u01/oradata/pdb","/u02/stdby")*********将primary db 的redo log file的位置重命名到standby db的redo log file的位置,oracle document说如果这个不成功,应当手工重命名standby db 的redo log file的文字,不过我没试过,呵呵
lock_name_space = SDB ***指定DLM的名字空间(命名空间)为sdb。这是将standby db 和 primary db装载一个host上必须设置的
compatible = "8.0.5"***************必须与primary DB的一致


13. 在tty1,以 oracle 启动primary DB
$sqlplus "/ as sysdba"
SQL>startup

14. 准备启动standby db管理回复
(1). 在tty2,以standby 启动standby实例,但是不安装
$sqlplus "/ as sysdba"
SQL>startup nomount pfile=/u02/stdby/initSDB.ora
(如果在$ORACLE_HOME/dbs中已经建立了initSDB.ora的link,则只要startup nomount就好了)

(2). 安装但不打开备用数据库。
ALTER DATABASE MOUNT STANDBY DATABASE;

(3). 将primary db的archive log file复制到/u02/arc_dest
$cp /u01/oradata/arch/* /u02/arc_dest

(4). 使用AUTOMATIC选项回复数据库
SQL>RECOVER AUTOMATIC STANDBY DATABASE;
见到形如Specify log: {<RET>=suggested | filename | AUTO | CANCEL}的提示,只管会车就好了

(5). 进入managed recovery mode
SQL>recovery managed standby database;

注意:
可以使用recover managed standby database timeout 5 在随后的5分钟里等待primary db传送过来的archive log file;
发出这个命令后,可以转到tty1,做一次 alter system archive log current,然后看看改archive log file是否自动传送到了/u02/stdby/arc_dest中了:)
5分钟后,系统回到(4)的状态,这是可以尝试一下read open standby db。

15. read open standby db
SQL> ALTER DATABASE OPEN READ ONLY;
现在就可以做进一步更多的测试了,比如在primary db建个用户,建个表等等,然后把它给归档了,在standby db看看效果,呵呵


http://www.itpub.net/showthread.php?s=&threadid=27163&highlight=%2A%D4%DA%D2%BB%B8%F6%BB%FA%C6%F7%C9%CF%BD%A8%C1%A2%2A

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值