前提:
- 两台已经装有Oracle的linux机器。本次使用的是CentOS3_x86
- 主库上装有oracle服务及添加了一个名ora10g的实例
- 从库仅安装了oracle服务
- 为了方便,主从库oracle的安装路径完全一致。主库上的ORACLE_HOME=/u01/app/oracle
详细步骤:
主库服务设置
****检查主库的实例是否为归档状态
SQL>SELECT log_mode FROM v$database;
LOG_MODE
------------------------
NOARCHIVELOG
SQL>
****如果是非归档状态,将其更换为归档状态
SQL>SHUTDOWN IMMEDIATE;
SQL>STARTUP MOUNT;
SQL>ALTER DATABASE ARCHIVELOG;
SQL>ALTER DATABASE OPEN;
****启动数据库的force logging
SQL>ALTER DATABSE FORCE LOGGING;
****检查db_name和db_unique_name这两个参数,这次将这两个参数都设置为ora10g
SQL>show parameter db_name;
NAME TYPE VALUE
---------------- --------------- ----------------
db_name string ora10g
SQL>show parameter db_unique_name;
NAME TYPE VALUE
---------------- --------------- ----------------
db_unique_name string ora10g
****主从库的db_name一致,可是db_unique_name不能相同,因为主从库的db-unique_name会在dg_config当作log_archive_config参数。这个例子里,将从库的db_unique_name设置为“ora10g_stby”。
SQL>ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(ORA10G,ORA10G_STBY)';
****设置合适的远程归档日志路径。这个例子里,把flash_recover_area当作本地路径,或者你自己也可以指定一个特定的路径。指定SERVICE和DB_UNIQUE_NAME为了给从库路径做参考
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2=‘SERVICE=ora10g_stby NOAFFIRM ASYNC VALID=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=ORA10G_STBY';
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;
****LOG_ARCHIVE_FORMAT和LOG_ARCHIVE_MAX_PROCESSES参数要合理设置,REMOTE_LOGIN_PASSWORDFILE 要设置为EXCLUSIVE。
SQL>ALTER SYSTEM SET LOG_ARCHIVE_FORMAT=‘%t_%s_%r.arc' SCOPE=SPFILE;
SQL>ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30;
SQL>ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;
****除了之前的设置,还要确保主库和备库能互换角色。为了使互换角色能正常使用,需要设置如下参数。调整*_CONVERT参数用于解释主备库文件名和路径不同的地方。****
SQL>ALTER SYSTEM SET FAL_SERVER=ORA10G_STBY;
SQL>ALTER SYSTEM SET DB_FILE_NAME_CONVERT='ORA10G_STBY','ORA10G' SCOPE=SPFILE;
SQL>ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='ORA10G_STBY','ORA10G' SCOPE=SPFILE;
SQL>ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;
****记住,一些参数是不会立即生效的,所以需要重启数据库以确保他们能起作用。
****主备库都需要“$ORACLE_HOME/network/admin/tnsnames.ora”文件。你可以用Network Configuration Utility(netca)或者手动创建。
****主库的tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle//network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORA10G_STBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.238)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora10g)
)
)
ORA10G =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.185)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORA10G)
)
)
****备库的tnsname.ora****
# tnsnames.ora Network Configuration File: /u01/app/oracle//network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
ORA10G =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.185)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORA10G)
)
)
ORA10G_STBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.88.238)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora10g)
)
)
****如果你使用duplicate模式去创建从库,则这一步是不必要的。基于备份的duplicate,或者手动恢复,都要备份主库。
$ rman target = /
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
****在主库同步如下命令生成备库的控制文件
SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/ora10g_stby.ctl';
****由spfile文件生成备库的参数文件。
SQL>CREATE PFILE='/tmp/iniora10g_stby.ora' FROM SPFILE;
****修改与备库有关的参数,因为备库是复制过来的,所以只需修改如下参数:
*.db_unique_name='ORA10G_STBY'
*.fal_server='ORA10G'
*.log_archive_dest_2='SERVICE=ora10g ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ORA10G'
(以上是原文翻译,不过在我实践的过程中,我的备库是值安装了oracle服务,并没有oracle实例。所以$ORACLE_HOME/admin下的某些路径会不存在,那么则需看清楚生成的iniora10g_stby.ora中存在哪些路径。如果文件中有,而备库机器实际上没有该路径的话,则需手动添加。如有不符合的路径,也许手动更改该路径或修改ora文件)
更多详情见请继续阅读下一页的精彩内容:
推荐阅读:
使用RMAN的Duplicate功能创建物理DataGuard
Oracle基础教程之通过RMAN复制数据库
RMAN备份策略制定参考内容
RMAN备份学习笔记
Oracle数据库备份加密 RMAN加密
通过RMAN备份duplicate创建DataGuard