作用:primary database即为生产用的数据库,standby database用于对primary database进行备援,在primary database出现故障时可以激活standby database从而取代primary database对外提供服务,也可以通过standby database对primary database进行恢复。
软硬件要求:oracle 7.x、8.0.x要求os类型相同,host硬件相同
oracle 8i要求os类型相同(比如同为unix或同为nt),不强求host硬件相同
standby database的创建:把primary database的一个全备份拷贝到standby主机并启动到standby模式即可,具体细节看后面的介绍。
同步的原理:定期手动或自动的把primary database产生的归档日志文件传输到standby database,对standby database进行提升,使它与primary database进行同步。standby database与primary database将始终相差一个当前的online redo log。关于这一点在9i被实现,在9i里面能保持两个数据库绝对的同步,包括current online redo log。
归档日志文件的传输:在oracle 7.x、8.0.x,primary database产生的归档日志文件必须手工传输到standby database,一般我们可以定义一些batch job自动做这件事。
从oracle 8i开始,可以使primary database进入managed standby environment模式,它将通过net 8自动把归档日志文件传输到standby database的相应目录,这个过程可以由oracle自动并且同步进行。
Standby database是否会丢失数据:standby database与primary database将始终相差一个当前在线日志。因此,如果primary database损坏并且不能启动,此时从standby database进行恢复将丢失一个日志;此外,如果primary database损坏但能启动,此时可使用ALTER DATABASE ARCHIVE LOG CURRENT命令对当前日志进行归档,此时从standby database进行恢复将不会丢失数据。
9i的新特性:在oracle 9i ,standby database被改名成为data guard,将能对包括当前在线日志在内的所有日志进行传输,保持两边数据库数据的绝对同步。这些传输是通过tcp网络进行的,因此,我们的网络必须有足够的带宽。
standby database相关术语primary database
是我们用于生产的数据库。一个primary database可以有多个standby database。
primary site
也称为primary host,即primary database所在的主机。
standby database
这是一个数据库,用于对primary database进行备份。Standby database与primary database处于不同的host上,有自己的init.ora、controlfile、logfile、datafile等文件,必要时可以被激活从而取代primary database的功能。
standby site: (Oracle7, Oracle8, Oracle8i)
也称为standby host,即standby database所在的主机。
激活(activation)
standby数据库可以通过ALTER DATABASE ACTIVATE STANDBY DATABASE命令被激活。一旦standby数据库被激活,就成为一个普通的数据库对外提供服务,此时不再能apply log,并且不能再回到standby状态。
managed standby environment
这是primary数据库的第一种模式,处于这种模式下的主数据库将对在线日志文件进行自动归档并通过net8把它自动推送到standby数据库。standby数据库将始终能接收到这些归档的日志文件,如果standby数据库处于managed recovery mode,它还将自动apply这些归档的日志文件。
non-managed standby environment
这是primary数据库的第二种模式,处于这种模式下的主数据库将对在线日志文件进行自动归档,但并不把它传输到standby数据库。
managed recovery mode
这是standby数据库的第一种模式。oracle 8i一般处于这种模式,这是8i的新特性。系统自动apply从primary数据库来的最新的归档日志文件到standby数据库。我们可以使用recover managed standby database timeout 10命令修改系统自动apply新log的时间间隔,这里时间间隔被改成了10分钟,缺省为15秒。
manual recovery mode
这是standby数据库的第二种模式。必须使用RECOVER STANDBY DATABASE命令手工apply从primary数据库来的归档的日志文件。
open read only模式
这是standby数据库的第三种模式。仅仅允许对standby数据库进行select操作,但不允许update操作。此时不能apply从primary数据库来的归档的日志文件。如果用户需要apply,必须重新使数据库进入standby mode或managed standby mode。
文档约定:
蓝色标题的部分表示在主机上进行的操作,绿色标题的部分表示在备机上进行的操作。
灰色底纹的内容为在命令行窗口内操作的内容。
常量定义:
常量 说明%PRI_SID%
主机数据库的SID
%STD_SID%
备机数据库的SID
%PRI_INIT%
主机的初始化参数文件
%STD_INIT%
备机的初始化参数文件
%PRI_SYS_PASSWORD%
主机数据库Sys用户的密码
%STD_SYS_PASSWROD%
备机数据库Sys用户的密码
%PRI_ARCHIVE_LOG_PATH%
主数据库的归档日志存放的位置
%STD_ARCHIVE_LOG_PATH%
备数据库的归档日志存放的位置
%ARCHIVE_LOG_FORMAT%
归档日志文件名称的格式(%T_%S.ARC)
%STD_CONTROL_PATH%
备机的控制文件存放的位置
%STD_DATA_PATH%
备机数据文件存放的位置
%PRI_LOG_PATH%
主机联机日志存放的位置
%STD_LOG_PATH%
备机联机日志存放的位置
%PRI_STD_NAME%
主机上配置的备机的连接字符串的名称
%STD_STD_NAME%
备机上配置的备机的连接字符串的名称
%STD_SYSTEM_LOG_PATH%
备机系统日志存放的位置
%STD_PROFILE_PATH%
备机初始化参数文件存放的位置
%PRI_ORACLE_HOME%
主机Oracle的主目录
%STD_ORACLE_HOME%
备机Oracle的主目录
%STD_IP_ADDRESS%
备机的IP地址
%STD_LISTEN_PORT%
备机监听端口
操作前请确定好这些常量的数据。
SQL>Select * From v$Version
2-安装数据库软件安装数据库软件,要保证数据库软件的版本与主机的一致。 3-创建指向备机的数据库连接信息在主机中的%PRI_ORACLE_HOME%\Network\Admin\Tnsnames.Ora增加以下的内容
%PRI_STD_NAME% =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = %STD_IP_ADDRESS%)(PORT = %STD_LISTEN_PORT%))
)
(CONNECT_DATA =
(SERVICE_NAME = %STD_SID%)
)
)
4-确定主机数据库的运行模式确定主机数据库运行在归档日志模式下,并且归档日志的文件命名格式不要与数据库的SID相关。
确定数据库是否运行在归档日志模式下
DOS>sqlplus /nolog
SQL>connect sys/%PRI_SYS_PASSWORD%@%PRI_SID% as sysdba
SQL>archive log list
如果数据库没有运行在归档日志模式下,那么按照下面的步骤将数据库设置到归档日志模式下。
修改主数据库的初始化文件%PRI_INIT%增加以下的内容
Log_Archive_Start=True
Log_Archive_Format=%ARCHIVE_LOG_FORMAT%
Log_Archive_Dest_1=” LOCATION =%PRI_ARCHIVE_LOG_PATH%”
Log_Archive_Dest_State_1=enable
Log_Archive_Dest_2=”SERVICE=%PRI_STD_NAME% reopen=60”
Log_Archive_Dest_State_2=enable
在SQL PLUS窗口中运行以下的命令
SQL>Alter Database Close;
SQL>Alter Database Archivelog;
SQL>Shutdown Immediate;
SQL>Archive log list
SQL>Startup;
SQL>Alter System Switch Logfile;
查看数据是否处于归档日志模式,同时在设定的%PRI_ARCHIVE_LOG_PATH%目录中是否生成了归档日志文件。
5-对主数据库进行一次全热备份使用数据库备份工具操作,在备机上运行。备份文件的位置放到%STD_DATA_PATH%
6-确定要备份到备机的数据文件的位置和名称将临时表空间文件复制到备机的%STD_DATA_PATH%目录下。
将联机日志文件复制到备机的%STD_LOG_PATH%目录下。
将初始化参数文件复制到备机的%STD_PROFILE_PATH%目录下并且更名为%STD_INIT%。
这些文件可以联机复制,数据文件和控制文件不可以。
创建备机的控制文件SQL>Alter Database Create Standby Controlfile As ‘C:\STD.CTL’
将生成的Std.CTL文件复制到备机的%STD_CONTROL_PATH%目录下,同时创建两个一样的备份。
7-修改备库初始化参数文件修改Control_Files参数,将相关的路径和文件名改为备机上的配置。
删除Log_Archive_Dest_2、Log_Archive_Dest_State_2和Log_Archive_Dest_State_1的配置信息。
修改Log_Archive_Start = Flase
修改Log_Archive_Dest_1 = "Location=%STD_ARCHIVE_LOG_PATH%"
增加Standby_Archive_Dest="%STD_ARCHIVE_LOG_PATH%"
standby_archive_dest = "C:\oracle\oradata\ora8db2\archive"
不要加location,否则无法归档
增加LOG_FILE_NAME_CONVERT =( '%PRI_LOG_PATH%', '%STD_LOG_PATH%' )
增加Background_Dump_Dest="%STD_SYSTEM_LOG_PATH%"
增加User_Dump_Dest="%STD_SYSTEM_LOG_PATH%"
8-创建备机数据库的监听确定%STD_ORACLE_HOME%\Network\Admin下是否有Listener.Ora,如果没有则将一下的内容保存到%STD_ORACLE_HOME%\Network\Admin\Listener.Ora文件中。
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = %STD_IP_ADDRESS%)(PORT = %STD_LISTEN_PORT%))
)
)
(DESCRIPTION =
(PROTOCOL_STACK =
(PRESENTATION = GIOP)
(SESSION = RAW)
)
(ADDRESS = (PROTOCOL = TCP)(HOST = %STD_IP_ADDRESS%)(PORT = 2481))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = %STD_ORACLE_HOME%)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = %STD_SID%)
(ORACLE_HOME = %STD_ORACLE_HOME%)
(SID_NAME = %STD_SID%)
)
)
如果有,则将下面的内容追加到%STD_ORACLE_HOME%\Network\Admin \Listener.Ora文件中的SID_LIST_LISTENER段中。
(SID_DESC =
(GLOBAL_DBNAME = %STD_SID%)
(ORACLE_HOME = %STD_ORACLE_HOME%)
(SID_NAME = %STD_SID%)
)
9-创建备机的数据库连接字符串在备机中的%STD_ORACLE_HOME%\Network\Admin\Tnsnames.Ora增加以下的内容。如果该文件不存在则创建改文件。
%STD_STD_NAME% =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = %STD_IP_ADDRESS%)(PORT = %STD_LISTEN_PORT%))
)
(CONNECT_DATA =
(SERVICE_NAME = %STD_SID%)
)
)
10-创建备机的密码文件直接拷贝主机的密码文件也可以
DOS>orapwd filename=%STD_ORACLE_HOME%\Database\pwd%STD_SID%.ora password=%STD_SYS_PASSWORD%
11-创建备机数据库的Windows服务DOS>Oradim –NEW –SID %STD_SID% –STARTMODE manual
12-启动监听,并检查状态如果是在本机上操作,那么执行一下的命令启动监听,如果要重启,要到windows服务里面重启
DOS>Lsnrctl Start
如果是在远程桌面上操作,那么执行一下的命令启动监听
DOS>Sc Start 监听服务的名字
执行以下的命令,查看监听是否正常工作DOS>Lsnrctl Status
13-测试是否能够连接到备机执行以下的命令,测试网络连接
DOS>Tnsping %PRI_STD_NAME%
14-启动备机数据库DOS>sqlplus /nolog
SQL>connect sys/%STD_SYS_PASSWORD%@%STD_STD_NAME% as sysdba
SQL>Startup Nomount PFile = ’%STD_PROFILE_PATH%\%STD_INIT%’;
SQL>Alter Database Mount Standby Database;
15-更新备机数据库的数据文件存放信息SQL>Alter Database Rename File ‘主机上的位置’ To ‘备机上的位置’;
要将主机上DBA_DATA_FILES中的全部数据文件逐个按照上面的模式执行一次。
例如:主机上的文件为C:\Oracle\Ora81\OraData\System.Ora,在备机上存放的位置为E:\StdDB\Data\System.Ora,那么对应的语句就是
SQL>Alter Database Rename File ‘C:\Oracle\Ora81\OraData\System.Ora’ To ‘E:\StdDB\Data\System.Ora’;
16-刷新归档日志,查看是否正确更新到备机上以System用户模式执行以下的命令
SQL>Alter System Switch Logfile;
执行完毕后,查看备机的%STD_ARCHIVE_LOG_PATH%下是否有日志文件生成。
在主库上执行以下语句查看归档是否出错,或者看警告文件
SQL> select status, error from v$archive_dest where dest_id=2;
STATUS ERROR
--------- -----------------------------------------------------------------
VALID
17-同步数据库记录SQL>Recover Standby Database;
这是手工应用日志的模式,因为我们的standby数据库跟主库时间点不一致,所以我先手工的应用所需的日志,然后按照提示显示的文件编号,将从该文件以后生成的所有归档日志文件从主机上复制到备机的%STD_ARCHIVE_LOG_PATH%中,然后输入Auto执行同步操作。
18-将数据库设置成自动应用模式SQL>Recover Managed Standby Database;
执行完17步,备库跟主库就同步了,以后就可以让备库自动应用主库推过来的日志了,执行完本操作后,自动应用归档,进程将处于“挂起”状态,请不要关闭程序执行窗口。
19-检查DataGuard工作是否正常检查%STD_SYSTEM_LOG_PATH%下的日志文件,看是否现实在不断的更新新的归档日志数据到数据库中。
DataGuard数据库的启动和关闭 20-DataGuard数据库的关闭DOS>sqlplus /nolog
SQL>connect sys/%STD_SYS_PASSWORD%@%STD_STD_NAME% as sysdba
SQL> Recover Managed Standby Database Cancel;
SQL>Shutdown Immediate;
21-DataGuard数据库的启动从创建步骤的第12步开始执行,一直到第19步为止。
说明:
===========
- 要保持standby数据库处于最新状态,可以手工把primary数据库产生的archived redo logs拷贝到standby主机并apply,这个工作最后通过batch job完成。
- 在primary数据库所做的任何改变都必须在standby数据库完成,如果在primary数据库增加了数据文件则在standby数据库也必须在standby数据库增加相应的文件或把primary数据库的文件拷贝到standby数据库,如果standby数据库不能找到相应的datafile,则在恢复的过程中会产生ORA-1157错误。使用以下语句为standby数据库创建新文件:
ALTER DATABASE CREATE DATAFILE
- 在standby数据库,任何Offlined状态的文件将不能被恢复,在standby数据库出现个别文件损坏时我们可能需要这么做。
- 你可以在primary数据库增加或减少online redo log而不对standby数据库造成影响。
- 如果primary数据库被修改成MTS或OPS数据库,则你必须重建standby数据库的controlfile (可以按照上面的第2步进行).
- 如果在primary数据库使用了 ALTER DATABASE CLEAR UNARCHIVED LOGFILE语句或做了不完全恢复(ALTER DATABASE OPEN RESETLOGS),则standby数据库的日志将会出现中断,此时需要按照以上的所有步骤重建standby数据库。
- 如果在primary数据库使用ALTER DATABASE CREATE CONTROLFILE ,则你必须重建standby数据库的controlfile,使用以下步骤:
1、shut down standby数据库。2、在 primary数据库 使用ALTER DATABASE ARCHIVE LOG CURRENT对当前日志进行归档。3、拷贝primary数据库产生的归档日志到standby主机。4、在standby主机做以下操作: STARTUP NOMOUNT, ALTER DATABASE MOUNT STANDBY DATABASE, RECOVER STANDBY DATABASE.
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8554499/viewspace-591564/ ,如需转载,请注明出处,否则将追究法律责任。