OS: REDHAT EL4
DB: oracle 10.2.0.1
前提准备工作:
灾备环境中的所有节点必须安装相同的操作系统,但是操作系统的版本可以不相同。
灾备环境中的所有节点必须安装完全相同版本的Oracle数据库软件,包括版本号和发布号。
主库必须处于归档(ARCHIVELOG)模式。
灾备环境中所有节点的硬件和操作系统架构必须相同,比如主节点是Sparc 64-bit SunOS,那么备用节点也必须是Sparc 64-bit SunOS。
主库可以是单实例,也可以是RAC。
主节点和备用节点之间的硬件配置可以不同,比如CPU数量,内存数量,存储的配置等等。
配置灾备环境的数据库用户必须具有SYSDBA权限。
cluster环境中两个节点的tnsnames.ora, listener.ora, sqlnet.ora, spfile, pfile必须保证相同
############# 第1步 ###################################################
Master装OS,装oracle10g,建库,导入数据;
Slave装OS,装oracle10g,不建库;
Master:
alter system force logging;
#查看状态
select FORCE_LOGGING from v$database;
#修改数据库为归档模式:
archive log list;
shutdown immediate;
startup mount;
alter database archivelog; # alter database noarchivelog;关掉归档模式
archive log list;
############# 第2步 ###################################################
Master:
修改tnsnames.ora:
primary=自己
standby=备机
如下:
Slave:
primary=自己
standby=备机
修改tnsnames.ora
############# 第3步 ###################################################
Slave:
lsnrctl; stop;
############# 第4步 ###################################################
Master:
ALTER DATABASE FORCE LOGGING;
shutdown immediate;
startup mount;
alter database create standby controlfile as '/home/oracle/stdctrl.ctl'; # 为备机创建控制文件
create pfile from spfile;
shutdown immediate;
lsnrctl: stop;
备份 数据文件,控制文件,redo文件
############# 第5步 ###################################################
Master:
复制Master的文件到Slave的同样的位置。
例如:Master的数据文件在/data/oracle/10.2.0.1/SID/下,Slave必须有相同的目录;
具体为:
复制数据文件到Slave;
复制redo文件到Slave;
复制第4步中创建的备机控制文件到Slave;
复制第4步中创建的pfile到Slave; # 即$ORACLE_HOME/dbs/initSID.ora
复制Master的口令文件到备机; # 即$ORACLE_HOME/dbs/orapwSID
############# 第6步 ###################################################
Slave:
备机控制文件的数量,名字,和所在位置必须和主机一致;内容是第4步创建的控制文件。
例如:
cp /data/oracle/stdctrl.ctl /data/oracle/SID/control01.ctl
cp /data/oracle/stdctrl.ctl /data/oracle/SID/control02.ctl
cp /data/oracle/stdctrl.ctl /data/oracle/SID/control03.ctl
############# 第7步 ###################################################
修改pfile,添加一些参数,具体如下:
Slave:
*.standby_archive_dest='/data/oracle/archivelogDG'
# switchover后,这两个参数需要反转
*.fal_server='primary'
*.fal_client='standby'
*.standby_file_management=auto
*.log_archive_dest_1='LOCATION=/data/oracle/archivelog' # 注意,这个参数也许在上面已经设置过了
# 注意,备机这里要填primary
# 注意,如果不想强制同步,则可以把MANDATORY改成OPTIONAL
# MANDATORY:如果无法同步时,主机也无法写入数据,这样的好处是一旦同步机制失效,则可以保护主备机一致;
# OPTIONAL: 如果无法同步时,主机可以写入数据,这样一旦同步机制失效,主备机的数据不会统一。
*.log_archive_dest_2='SERVICE=primary MANDATORY REOPEN=60'
*.archive_lag_target=1800 # 通常大于7200和小于1800不被推荐,低于30分钟的切换时间可能导致性能问题。
Master:
*.standby_archive_dest='/data/oracle/archivelogDG'
# switchover后,这两个参数需要反转
*.fal_server='standby'
*.fal_client='primary'
*.standby_file_management=auto
*.log_archive_dest_1='LOCATION=/data/oracle/archivelog' # 注意,这个参数也许在上面已经设置过了
# 注意,主机这里要填standby
# 注意,如果不想强制同步,则可以把MANDATORY改成OPTIONAL
# MANDATORY:如果无法同步时,主机也无法写入数据,这样的好处是一旦同步机制失效,则可以保护主备机一致;
# OPTIONAL: 如果无法同步时,主机可以写入数据,这样一旦同步机制失效,主备机的数据不会统一。
*.log_archive_dest_2='SERVICE=standby MANDATORY REOPEN=60'
*.archive_lag_target=1800 # 通常大于7200和小于1800不被推荐,低于30分钟的切换时间可能导致性能问题。
############# 第8步 ###################################################
启动备机:
lsnrctl ; start
tnsping primary; #测试是否可以连通主机,如果不行,检查主机listener
startup nomount pfile='第4步生成的pfile'
ALTER DATABASE MOUNT STANDBY DATABASE;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
############# 第9步 ###################################################
启动主机:
$lsnrctl ; start
$tnsping standby; #测试是否可以连通备机,如果不行,检查备机listener
startup pfile='第4步生成的pfile'
############# 第10步 ###################################################
测试主备是否能够同步:
Master强制归档:
可选操作:alter database clear unarchived logfile group 1; #丢弃没有归档的操作;
alter system archive log current; #强制归档
select max(sequence#) from v$archived_log; #查看当前归档数字;
Slave:
select max(sequence#) from v$archived_log; #查看当前归档数字;
如果两个机器归档数字一样,就说明已经同步了。