最简单的一种情况
Ø 主库和备库的文件路径一致
Ø 主库和备库不需要进行切换
Ø 备库只安装了oracle软件,未安装oracle服务器
1. 判断是否已经安装data guard
Select * from v$option where parameter = ‘Oracle Data Guard’;
2. 服务器配置
10.27.92.201主库 primary(db_name) primary(db_unique_name)
10.27.92.202 副库 primary(db_name) standby(db_unique_name)
数据文件的存放位置:C:\oracle\product\10.2.0\oradata\primary
3. 配置监听
listener.ora文件
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.27.92.201)(PORT = 1521))
)
)
tnsnames.ora文件
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.27.92.201)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = primary)
)
)
standby =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.27.92.202)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = standby)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
4. 主库设置force logging模式
Select force_logging from v$database;
Alter databse force logging;
5. 创建口令文件
Orapwd file=$ORACLE_HOME/dbs/orapwdbl password=oracle enties=5
主库的日志文件向备库同步的时候,需要进行身份验证。参数文件中有个参数与这个配置相关
6. 主库归档模式
Archive log list
Startup mount
Alter database archivelog;
Alter database open
7. 设置主库本地归档目录
Alter system set log_archive_dest_1=’location=C:\oracle\product\10.2.0\archivedlog VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=primary’ scope = both;
Alter system set log_archive_dest_state_1 = enable scope = both;
alter system set LOG_ARCHIVE_DEST_2='SERVICE=standby LGWR ASYNC VALID_FOR=(
ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby' scope=spfile;
Alter system set log_archive_dest_state_2 = enable scope = both;
Shutdown immediate
Startup
备注:在自动归档模式下,如果没有设置log_archive_dest,则oracle会选择一个默认目录作为归档目的地。log_archive_dest和log_archive_dest_n是互斥的,如果主库和备库互相切换就至少需要2个归档目的地(本地和远端
8. 测试本地归档
Alter system switch logfile;
9. 修改参数文件
Standby_file_management = auto
10. 生成pfile文件
Create pfile = ‘c:\primary_pfile’ from spfile;
11. 主库进行全库的冷备份,包括数据文件,控制文件,日志文件,参数文件,口令文件以及密码文件
12. 生成控制文件
Sql>startup mount
Sql>alter database create standby controlfile as ' C:\oracle\product\10.2.0\oradata\primary\standby_ctl01.ctl'
2.2备库的创建
1. 创建备库的主目录(这些目录在控制文件中存在)
Ø C:\oracle\product\10.2.0\admin\primary\adump
Ø C:\oracle\product\10.2.0\admin\primary\bdump
Ø C:\oracle\product\10.2.0\admin\primary\cdump
Ø C:\oracle\product\10.2.0\admin\primary\dpdump
Ø C:\oracle\product\10.2.0\admin\primary\udump
Ø C:\oracle\product\10.2.0\admin\primary\pfile
Ø C:\oracle\product\10.2.0\flash_recovery_area
Ø log_archive_dest_1参数值指定的文件目录,本示例中是C:\oracle\product\10.2.0\archivedlog
2. 拷贝主服务器的数据文件、日志文件、密码文件及刚生成pfile文件的文件到备用服务器相对应的目录
Pfiel保存路径为:C:\oracle\product\10.2.0\db_1\database,命名原则是init+db_unique_name+.ora
密码文件的保存路径和pfile的相同
3. 拷贝控制文件
将在主库创建的控制文件standby_ctl01.ctl拷贝到备库中,修改名称并复制2份,放到相应目录下。参考pfile中control_files的值。
4. 修改备库的pfile
Ø control_files该参数如果和备用数据库的控制文件目录位置不同,则必须修改成备用数据库控制文件的目录位置;
Ø 如果bdump、cdump和udump目录和主库相比发生了变化,则background_dump_dest\core_dump_dest\user_dump_dest三个参数做相应的更改,否则不变;
Ø 加入standby_archive_dest='c:\oracle\archivelog\'; ---该参数记录了主数据库向备用数据库传递归档日志的位置;这里的日志文件应该叫做standby log fie,然后备库的进程将其归档,称为archived log file
Ø 修改standby_file_management=AUTO; ---AUTO用来自动管理归档文件,manual--手工管理,改成auto主库上表空间、数据文件的增加或者删除可以在从库上自动同步。但是当值设为auto,不能进行alter database rename file ... to ... 的操作
Ø 保持db_name不变,但是添加一个值db_unique_name=standby
物理备库的db_name必须和主库的db_name相同
5. 创建备用库的数据库实例
c:\>oradim -new -sid standby -srvc oracleServiceORCL -startmode manual -pfile C:\oracle\product\10.2.0\db_1\database\initstandby.ora;
6. 创建备用库的listener服务
从主库拷贝tnsnames.ora、listener.ora文件,并修改拷贝来的listener.ora文件,只需要修改里面的HOST地址,指向备库10.27.92.202即可
7. 备用和主库都检测listener能否正常启动;
lsnrctl start;
LSNRCTL>STATUS;
如果状态正常则ok;
8. 备用和主库都检测tnsnames配置情况;
c:\>tnsping primary;
c:\>tnsping standby;
如果都正常的话说明主、备数据库之间的通讯就没有问题
9. 启动standby数据库;
c:\>sqlplus /nolog
sql>conn / as sysdba
sql>create spfile from pfile=’ C:\oracle\product\10.2.0\db_1\database\initstandby.ora’
sql>startup nomount
或者指定pfile
sql>startup nomount pfile='C:\oracle\product\10.2.0\db_1\database\initstandby.ora'
sql>alter database mount standby database;
--设置备库处于应用归档状态
如果在连接时抛出异常:ORA-12560: TNS 协议适配器错误的问题,尝试下面的解决办法:打开注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDb10g_home1添加环境变量ORACLE_SID设置为XXXX,XXXX就是你的database SID
sql>alter database recover managed standby database disconnect from session;
10. 回到主库服务器,对主库进行操作;
---继主库create standby controlfile之后的操作
sql>alter database open;
执行若干数据库操作
sql>alter system switch logfile;
sql>alter system switch logfile;
多切换几次
11. 转回备用库
sql>alter database recover managed standby database cancel;
sql>alter database open read only