OS:Windows 2008 R2 DataCenter
Database:10.2.0.4
Primary Database DB_UNIQUE_NAME:ora10gpd
IP:192.168.17.10
Standby Database DB_UNIQUE_NAME:ora10gst
IP:192.168.17.11
SID:ora10g
INSTANCE_NAME:ora10g
SERVICE_NAME:ora10g
GLOBAL_DBNAME:ora10g
DBNAME:ora10g
Net Service Name:ORA10GPD,ORA10GST
安装数据库软件选择介质要注意,需直接安装10.2.0.4的版本,Window 2008 R2已不再支持Win_64的10.2.0.1的包,而不是像Windows 2003 Etnerprise那样,先装完10.2.0.1再升级到10.2.0.4
另外要注意,如果执行setup没有通过检查,需要修改安装的参数文件oraparam,这个文件位于安装介质database\install\oraparam,把不符合要求的数值添加一下即可通过,在OUI界面出来后正式安装前,选用户已验证,忽略操作系统的检查就可以顺利安装了
主库安装完软件以后用dbca创建数据库实例ora10g,备库只需要安装数据库软件即可
Primary Database Configuration:
1.设置主数据库为force logging模式
SQL> conn /as sysdba
SQL> select force_logging from v$database;
SQL> alter database force logging;
2. 设置主数据库为归档模式
先查看一下是否为归档模式,有两种方法:
方法一:
SQL> archive log list
方法二:
SQL> select log_mode from v$database;
修改为归档模式
SQL> shutdown immediate
SQL> startup mount
SQL> alter database archivelog;
3. 主库添加standby redo logfile
此时主库还未切换成备库,所以备库日志文件状态皆为“UNASSIGNED”
4. 创建主库的初始化参数给备库用
SQL> create pfile from spfile;
存放目录默认为:%ORACLE_HOME%\database\INITora10g.ora
创建完参数后,写回到spfile并用修改好参数的spifle启动
SQL> shutdown immeidate
SQL> startup pfile=%ORACLE_HOME%/database/INITora10g.ora;
SQL> create spfile from pfile;
SQL> shutdown immeidate
SQL> startup
5. 在主库创建备库的控制文件和密码文件
SQL> alter database create standby controlfile as 'C:\control01.ctl';
C:\Users\Administrator>orapwd file=C:\PWDora10g.ora password=oracle entries=5;
注意:windows下口令文件的格式是pwdsid.ora,unix下的格式是orapwSID(大小写敏感)
6. 在主库创建LISTENER.ora和tnsnames.ora
用netca创建动态监听和tnsnames.ora,用net manager创建静态监听
配置好的LISTENER.ora显示如下:
# listener.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ora10g)
(ORACLE_HOME = C:\oracle\product\10.2.0\db_1)
(SID_NAME = ora10g)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora10gpd)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
配置好的tnsnames.ora显示如下:
# tnsnames.ora Network Configuration File: C:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORA10GPD =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora10gpd)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora10g)
)
)
ORA10GST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora10gst)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora10g)
)
)
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
7. 配置主库pfile,添加DG参数
由于主备库采用路径一致,实例名也一致,所以没有添加db_file_name_convert和log_file_name_convert这2个参数
主库部分:
DB_UNIQUE_NAME=ora10gpd
LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora10gpd,ora10gst)'
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=ora10gpd'
LOG_ARCHIVE_DEST_2='SERVICE=ora10gst lgwr VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora10gst'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
备库部分:
FAL_SERVER=ora10gst
FAL_CLIENT=ora10gpd
STANDBY_FILE_MANAGEMENT='AUTO'
8. 拷贝参数文件,密码文件到备库
INITora10g.ora参数文件,PWDora10g.ora密码文件考到%ORACLE_HOME%\database下
9. 用RMAN备份主库数据库文件及控制文件并复制到备库
rman target /
run
{
allocate channel d1 type disk format 'c:\%U';
backup full database include current controlfile for standby;
release channel d1;
}
Standby Database Configuration:
10. 复制pfile到备库后,对相应参数做调整,大致如下:
主库时参数:
DB_UNIQUE_NAME=ora10gst
LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora10gpd,ora10gst)'
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=ora10gst'
LOG_ARCHIVE_DEST_2='SERVICE=ora10gpd lgwr VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=ora10gpd'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
备库时参数:
FAL_SERVER=ora10gpd
FAL_CLIENT=ora10gst
STANDBY_FILE_MANAGEMENT='AUTO'
11. 在备库启动实例
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jul 15 00:31:35 2014
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
ERROR:
ORA-12560: TNS:protocol adapter error
C:\Users\Administrator>set oracle_sid=ora10g
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jul 15 00:37:27 2014
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Connected to an idle instance.
SQL>
如果设置了ORACLE_SID后仍然报ORA-12560,则需要查看一下Windows服务OracleServiceora10g是否没有启动
Windows中如果需要配置实例名,可以用oradim这个工具(可选步骤)
C:\Users\Administrator>oradim -new -sid ora10g
SQL> startup nomount
ORA-02778: Name given for the log directory is invalid
尝试删除文件pfile后:
SQL> startup nomount
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file 'C:\ORACLE\PRODUCT\10.2.0\DB_1\DATABASE
\INITORA10G.ORA'
把pfile还原:
SQL> startup nomount
ORA-02778: Name given for the log directory is invalid
SQL> startup nomount
ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
ORA-01263: Name given for file destination directory is invalid
OSD-04018: Unable to access the specified directory or device.
O/S-Error: (OS 2) 系统找不到指定的文件。
添加以下目录后再次执行:
C:\oracle\product\10.2.0\flash_recovery_area
C:\oracle\product\10.2.0\admin\ora10g\adump
C:\oracle\product\10.2.0\admin\ora10g\bdump
C:\oracle\product\10.2.0\admin\ora10g\cdump
C:\oracle\product\10.2.0\admin\ora10g\dpdump
C:\oracle\product\10.2.0\admin\ora10g\pfile
C:\oracle\product\10.2.0\admin\ora10g\udump
主要是红色这几个文件,因为在pfile中有参数对应这几个位置
SQL> startup nomount
ORACLE instance started.
Total System Global Area 612368384 bytes
Fixed Size 2067656 bytes
Variable Size 171967288 bytes
Database Buffers 432013312 bytes
Redo Buffers 6320128 bytes
SQL>
手动创建和主库一致的目录后问题解决
12. 把生成的备份集复制到备库后,执行恢复
rman target / auxiliary sys/oracle@ora10gst
run
{
allocate auxiliary channel d1 type disk;
duplicate target database for standby dorecover nofilenamecheck;
release channel d1;
}
C:\Users\Administrator>rman target / auxiliary sys/oracle@ora10gst
恢复管理器: Release 10.2.0.4.0 - Production on 星期二 7月 15 00:52:10 2014
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到目标数据库: ORA10G (DBID=4171788416)
已连接到辅助数据库: ORA10G (未装载)
RMAN> run
2> {
3> allocate auxiliary channel d1 type disk;
4> duplicate target database for standby dorecover nofilenamecheck;
5> release channel d1;
6> }
使用目标数据库控制文件替代恢复目录
分配的通道: d1
通道 d1: sid=157 devtype=DISK
启动 Duplicate Db 于 15-7月 -14
内存脚本的内容:
{
set until scn 660928;
restore clone standby controlfile;
sql clone 'alter database mount standby database';
}
正在执行内存脚本
正在执行命令: SET until clause
启动 restore 于 15-7月 -14
通道 d1: 正在还原控制文件
故障转移到上一个备份
释放的通道: d1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: Duplicate Db 命令 (在 07/15/2014 00:52:43 上) 失败
RMAN-03015: 在存储的脚本Memory Script中出现错误
RMAN-06026: 有些目标没有找到 - 终止还原
RMAN-06024: 没有找到控制文件的备份或副本来还原
13. 尝试用备库连接主库并做还原
C:\Users\Administrator>rman target sys/oracle@ora10gpd auxiliary /
Recovery Manager: Release 10.2.0.4.0 - Production on Tue Jul 15 01:59:05 2014
Copyright (c) 1982, 2007, Oracle. All rights reserved.
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
查看监听状态
C:\Users\Administrator>lsnrctl status
LSNRCTL for 64-bit Windows: Version 10.2.0.4.0 - Production on 15-7月 -2014 02:0
9:01
Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora10gst)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 10.2.0.4.0 - Produ
ction
启动日期 15-7月 -2014 00:28:29
正常运行时间 0 天 1 小时 40 分 34 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 C:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件 C:\oracle\product\10.2.0\db_1\network\log\listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora10gst)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "ora10g" 包含 1 个例程。
例程 "ora10g", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "ora10gst" 包含 1 个例程。
例程 "ora10g", 状态 BLOCKED, 包含此服务的 1 个处理程序...
服务 "ora10gst_XPT" 包含 1 个例程。
例程 "ora10g", 状态 BLOCKED, 包含此服务的 1 个处理程序...
命令执行成功
停止监听
C:\Users\Administrator>lsnrctl stop
LSNRCTL for 64-bit Windows: Version 10.2.0.4.0 - Production on 15-7月 -2014 02:0
9:15
Copyright (c) 1991, 2007, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora10gst)(PORT=1521)))
命令执行成功
重新启动监听
C:\Users\Administrator>lsnrctl start
LSNRCTL for 64-bit Windows: Version 10.2.0.4.0 - Production on 15-7月 -2014 02:0
9:20
Copyright (c) 1991, 2007, Oracle. All rights reserved.
启动tnslsnr: 请稍候...
TNSLSNR for 64-bit Windows: Version 10.2.0.4.0 - Production
系统参数文件为C:\oracle\product\10.2.0\db_1\network\admin\listener.ora
写入C:\oracle\product\10.2.0\db_1\network\log\listener.log的日志信息
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora10gst)(PORT=1521)))
监听: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora10gst)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for 64-bit Windows: Version 10.2.0.4.0 - Produ
ction
启动日期 15-7月 -2014 02:09:24
正常运行时间 0 天 0 小时 0 分 5 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 C:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
监听程序日志文件 C:\oracle\product\10.2.0\db_1\network\log\listener.log
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora10gst)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
服务摘要..
服务 "PLSExtProc" 包含 1 个例程。
例程 "PLSExtProc", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "ora10g" 包含 1 个例程。
例程 "ora10g", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
UNKNOW表示静态监听
C:\Users\Administrator>rman target sys/oracle@ora10gpd auxiliary /
恢复管理器: Release 10.2.0.4.0 - Production on 星期二 7月 15 02:13:41 2014
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到目标数据库: ORA10G (DBID=4171788416)
已连接到辅助数据库: ORA10G (未装载)
RMAN>
原因:由于监听没有重启过,故之前设置的静态监听没有生效,还是原来错误的信息
RMAN> duplicate target database for standby dorecover nofilenamecheck;
启动 Duplicate Db 于 15-7月 -14
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: sid=155 devtype=DISK
内存脚本的内容:
{
set until scn 660928;
restore clone standby controlfile;
sql clone 'alter database mount standby database';
}
正在执行内存脚本
正在执行命令: SET until clause
启动 restore 于 15-7月 -14
使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 正在还原控制文件
故障转移到上一个备份
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: Duplicate Db 命令 (在 07/15/2014 02:19:01 上) 失败
RMAN-03015: 在存储的脚本Memory Script中出现错误
RMAN-06026: 有些目标没有找到 - 终止还原
RMAN-06024: 没有找到控制文件的备份或副本来还原
在备库上连接主库,并且没有用通道依旧不行
14. 直接在备库上进行还原
RMAN> catalog start with 'c:\';
使用目标数据库控制文件替代恢复目录
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: catalog 命令 (在 07/15/2014 02:32:59 上) 失败
ORA-01507: 未装载数据库
RMAN> catalog backuppiece 'c:\02PDDMR5_1_1'; --之前主库做全备时生成的控制文件备份集
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: catalog 命令 (default 通道上, 在 07/15/2014 02:33:31 上) 失败
ORA-01507: 未装载数据库
RMAN>
C:\Users\Administrator>sqlplus / as sysdba
SQL*Plus: Release 10.2.0.4.0 - Production on 星期二 7月 15 02:35:06 2014
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> alter database mount standby database;
alter database mount standby database
*
第 1 行出现错误:
ORA-00205: 标识控制文件时出错, 有关详细信息, 请查看预警日志
此时由于控制文件还没有恢复,无法启动到mount状态,也无法利用备份集恢复数据文件
15. 直接把在主库上为备库创建过的备库控制文件复制到备库相应位置
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 612368384 bytes
Fixed Size 2067656 bytes
Variable Size 171967288 bytes
Database Buffers 432013312 bytes
Redo Buffers 6320128 bytes
ORA-00205: ?????????, ??????, ???????
这里乱码可能是因为环境变量的问题,其实是还是下面这句:
ORA-00205: error in identifying control file, check alert log for more info
C:\Users\Administrator>rman target /
恢复管理器: Release 10.2.0.4.0 - Production on 星期二 7月 15 09:45:44 2014
Copyright (c) 1982, 2007, Oracle. All rights reserved.
连接到目标数据库: ora10g (未装载)
RMAN> restore controlfile from 'c:\02PDDMR5_1_1';
启动 restore 于 15-7月 -14
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=156 devtype=DISK
通道 ORA_DISK_1: 正在还原控制文件
通道 ORA_DISK_1: 还原完成, 用时: 00:00:03
输出文件名=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\CONTROL01.CTL
输出文件名=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\CONTROL02.CTL
输出文件名=C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\CONTROL03.CTL
完成 restore 于 15-7月 -14
RMAN> alter database mount;
数据库已装载
释放的通道: ORA_DISK_1
RMAN> restore database;
启动 restore 于 15-7月 -14
启动 implicit crosscheck backup 于 15-7月 -14
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: sid=151 devtype=DISK
已交叉检验的 1 对象
完成 implicit crosscheck backup 于 15-7月 -14
启动 implicit crosscheck copy 于 15-7月 -14
使用通道 ORA_DISK_1
已交叉检验的 1 对象
完成 implicit crosscheck copy 于 15-7月 -14
搜索恢复区中的所有文件
正在编制文件目录...
没有为文件编制目录
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 正在开始恢复数据文件备份集
通道 ORA_DISK_1: 正在指定从备份集还原的数据文件
正将数据文件00001还原到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSTEM01.DBF
正将数据文件00002还原到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\UNDOTBS01.DBF
正将数据文件00003还原到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSAUX01.DBF
正将数据文件00004还原到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01.DBF
正将数据文件00005还原到C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\EXAMPLE01.DBF
通道 ORA_DISK_1: 正在读取备份片段 C:\01PDDMOQ_1_1
通道 ORA_DISK_1: 已还原备份片段 1
段句柄 = C:\01PDDMOQ_1_1 标记 = TAG20140715T001314
通道 ORA_DISK_1: 还原完成, 用时: 00:01:05
完成 restore 于 15-7月 -14
RMAN>
15. 验证RMAN备份是否成功
查看一下备库的文件是否已经恢复
SQL> set lin 80 pages 120
SQL> col name for a60
SQL> select file#,name from v$datafile;
FILE# NAME
---------- ------------------------------------------------------------
1 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSTEM01.DBF
2 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\UNDOTBS01.DBF
3 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\SYSAUX01.DBF
4 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\USERS01.DBF
5 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\EXAMPLE01.DBF
SQL> select name from v$tempfile;
NAME
------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\TEMP01.DBF
查看备库表空间情况
SQL> select ts#,name from v$tablespace;
TS# NAME
---------- ------------------------------------------------------------
0 SYSTEM
1 UNDOTBS1
2 SYSAUX
4 USERS
3 TEMP
6 EXAMPLE
已选择6行。
注意,因为此时数据库仍然在mount状态下,无法使用dba_data_files和dba_temp_files等视图查看,会提示ORA-01219错误
而只能通过v$的动态性能视图查看,因为这些固定表/视图是存放在数据字典中的,可以在mount状态下访问
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
MOUNTED
SQL> select file_name from dba_data_files;
select file_name from dba_data_files
*
第 1 行出现错误:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
SQL> select file_name from dba_temp_files;
select file_name from dba_temp_files
*
第 1 行出现错误:
ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询
16. 创建备库standby redo logfile group
由于主库参数中配置了lgwr,所以备库也需要创建standby redo log
SQL> alter database add standby logfile group 4 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ora10g\stdredo04.log') size 50m;
SQL> alter database add standby logfile group 5 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ora10g\stdredo05.log') size 50m;
SQL> alter database add standby logfile group 6 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ora10g\stdredo06.log') size 50m;
SQL> alter database add standby logfile group 7 ('C:\ORACLE\PRODUCT\10.2.0\ORADATA\ora10g\stdredo07.log') size 50m;
其实是因为恢复过来的控制文件中已经有了创建过standby redo logfile的记录了,而再创建一次的话,会提示:
ORA-01184: logfile group 4 already exists 日志文件组已经存在,似乎必须要在恢复备库控制文件之前,就先把standby redo logfile创建好。
但现在似乎陷入一个死循环:创建standby redo logfile,数据库必须先mount,而如果备库不先对备库控制文件进行恢复的话,是无法启动到mount状态的,尝试直接拷贝主库的standby redo logfile到备库,因为主库这个时候是不会用到这几个文件的,只有发生角色转换时才会用到,其现在的状态一定是UNASSIGNED的,所以可以放心拷贝。
SQL> alter system switch logfile;
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 24
下一个存档日志序列 26
当前日志序列 26
注意:最后要查看一下TEMP表空间和对应的数据库文件TEMP01.DBF是否存在,如果不是的话,手动添加一下。
有可能会出现有TEMP表空间,但没有对应的数据库文件,则可以用下面的语句添加:
SQL> ALTER TABLESPACE TEMP ADDTEMPFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G
\TEMP01.DBF' SIZE 100M;
注意这里关键词是TEMPFILE,如果是数据库文件,那么就改成DATAFILE,其他都一样。SIZE必须指定,否则会提示找不到该文件:
SQL> ALTER TABLESPACE TEMP ADD TEMPFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G
\TEMP01.DBF';
ALTER TABLESPACE TEMP ADD TEMPFILE 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\TEMP
01.DBF'
*
第 1 行出现错误:
ORA-01119: 创建数据库文件 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\TEMP01.DBF'
时出错
ORA-17610: 文件 'C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\TEMP01.DBF' 不存在,
大小也未指定
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> SELECT FILE_NAME FROM DBA_TEMP_FILES;
FILE_NAME
--------------------------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\TEMP01.DBF
SQL> SELECT FILE_NAME FROM DBA_TEMP_FILES;
FILE_NAME
--------------------------------------------------------------------------------
C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\TEMP01.DBF
可以看到,备库已经可以跟上主库的日志,一个个应用了,至此,DG顺利搭建完毕。
18. 最后,可以用pfile给备库创建一个spfile,那么以后再启动备库时,默认就会使用spfile来启动了(可选步骤)
关于临时表空间的说明:
由于RMAN备份不会对临时表空间的数据文件进行备份,所以DG环境搭建好之后,物理路径上是不存在临时表空间的,作为备库ROLE,固然没有什么关系,但当需要把备库切换成主库之前,就需要加上了
SQL> select tf.file#,tf.name as F_NAME,ts.name AS TS_NAME from v$tempfile tf,v$tablespace ts where tf.ts#=ts.ts#;
FILE# F_NAME TS_NAME
----- --------------------------------------------------------------------------------------------- ----------------
1 C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORA10G\TEMP01.DBF TEMP
查看一下视图,发现在控制文件中有这个表空间和对应的文件的记录,而实际物理路径oradata中却没有该文件,那么就需要手动创建一个文件,而此时作为10g的物理standby,没有办法直接添加,因为只能运行在mount状态下
如果此时备库切换成了主库并open,直接创建TEMP表空间也是不行的,会提示表空间已存在,此时可以重新建一个TEMP1表空间,文件名对应TEMP02.DBF,再把原来的TEMP表空间drop即可:
SQL> create temporary tablespace TEMP1 tempfile 'C:\oracle\product\10.2.0\oradata\ora10g\TEMP02.DBF' size 100m reuse;
SQL> alter database default temporary tablespace TEMP1;
SQL> drop tablespace TEMPincluding contents and datafiles;
关于保护模式的说明:
主库:
SQL> select open_mode,database_role,protection_mode,protection_level from v$database;
OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------- ---------------- -------------------- --------------------
READ WRITE PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
备库:
SQL> select open_mode,database_role,protection_mode,protection_level from v$database;
OPEN_MODE DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------- ---------------- -------------------- --------------------
MOUNTED PHYSICAL STANDBY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
主库在mount状态下:
SQL> alter database set standby database to maximize availability;
SQL> alter database set standby database to maximize protection;
注意:要切换成功,必须保证LGWR SYNC AFFIRM
关于SWITCHOVER的说明:
主库:
SQL> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
---------------- --------------------
PRIMARY SESSIONS ACTIVE
备库:
SQL> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY NOT ALLOWED
SQL> select count(*) from v$session where username is not null;
COUNT(*)
----------
1
虽然当前数据库的状态是SESSIONS ACTIVE而不是TO STANDBY,但是查询V$SESSION会话,确认除了当前会话外,其他都是系统会话,那么就可以在主库进行SWITCHOVER切换了
切换之前,除了看switchover_status是否正确以外,还要确保两边日志应用是同步的,否则当备库切换成主库时,会提示需要介质恢复,备库不用先cancel,可以直接做switchover
主库执行:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;
重启数据库,启动到MOUNT状态,注意,9i及以前版本需要分2步执行:
SQL> START NOMOUNT
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
备库执行:
SQL> ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
如果出现ora-16139:media reovery required 错误,则先执行redo apply,等日志都应用完以后再切换就ok了
如果再做一次switchover切换回来,切换好之后,备库没有及时开启redo apply的话,主库会报一个错误:
SQL> select status,error from v$archive_dest;
STATUS ERROR
--------- -----------------------------------------------------------------
VALID
ERROR ORA-16058: standby database instance is not mounted
解决方法很简单,备库重新启动redo apply即可,只有启动了MRP进程后,归档日志才会再一次传到备库,再次查看,远程归档就正常了,并且会把归档日志传递到备库,根据我们以往的经验,不开启MRP进程只是不应用,而不会连归档日志都不传,这里因为做了switchover切换,所以情况不太一样,只要记住,做好swithover切换以后查看远程归档路径是否正常,然后再切归档,进一步测试备库是否能收到归档并应用
关于FAILOVER的说明:
当主库完全挂掉,那么此时需要把备库强制激活,当做主库,把原来的主库重新配置成备库,再做一次switchover再切换回来
备库启动到mount状态下执行:
SQL> alter database activate standby database;
当执行alter database recover managed standby finish;那么DG configuration就被破坏了,备库此时变成独立的数据库而不再依赖于主库,此时有两种方法可以恢复DG:
1.重新搭建DG,用rman异机恢复方式
2.如果主库开启了flashback database,那么可以找到备库成为主库的那一刻的SCN,通过闪回数据库库回到那个SCN,再做恢复