分类: Oracle
2009-08-21 17:12:41
1. 环境... 2
2、准备工作... 2
2.1 HOSTB主机准备... 2
2.2 BAKSERV准备... 2
2.3 配置HOSTB主机... 2
3.恢复... 4
3.1 恢复控制文件... 4
3.2 恢复数据库... 5
3.3 其他文件的恢复... 5
4. 注意事项... 6
4.1 主机名问题... 6
4.2 HOSTB配置文件问题... 6
目的:测试备份数据是否完整可用。
环境
异机恢复涉及3台oracle服务器,说明如下:
表 1.1 主机说明
主机名 |
SID |
说明 |
操作系统 |
IP |
Oracle版本 |
BAKSERV |
catalog |
执行NBU备份任务的备份服务器 |
RH AS 4U5 |
192.168.10.2 |
|
HOSTA |
test |
源主机 |
RH AS 3U6 |
192.168.10.3 |
|
HOSTB |
test |
执行恢复任务的主机 |
RH AS 4U5 |
192.168.10.200 |
|
注:操作系统版本可以不一致(建议一致),但数据库版本必须一致
HOSTA用RMAN方式通过NBU软件将数据库每天作全备份到带库上,为了检查备份数据是否可用,我们在HOSTB上恢复数据。
、准备工作
主机准备
在该主机上安装Oracle
建立到BAKSERV的tnsname连接,以oracle用户登录操作如下:
$vi ORACLE_HOME/network/admin/tnsnames.ora),添加
CATALOG =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = catalog)
)
)
准备
将该主机配置为允许重定向恢复(即允许异机恢复)。以root用户登录:
#su – root
#mkdir –p /usr/openv/netbackup/db/altnames/
#cd /usr/openv/netbackup/db/altnames/
#touch No.Restrictions
配置HOSTB主机
以下操作除特殊说明外,均以oracle用户执行。
cp /usr/openv/netbackup/bp.conf $ORACLE_HOME/
在$ORACLE_HOME/dbs下生成inittest.ora文件,有2种方法可以实现:
(1)复制HOSTA主机上$ORACLE_HOME/dbs目录下的inittest.ora文件到HOSTB主机的$ORACLE_HOME/dbs目录下;
若HOSTA主机上无inittest.ora文件,可用以下方法生成。在HOSTA上,以sqlplus登录数据库,执行:
SQL> create pfile from spfile;
然后将文件复制到HOSTB。
(2)在HOSTB主机上新建文件inittest.ora
$touch $ORACLE_HOME/dbs/inittest.ora
在HOSTA主机上执行:
cat $ORACLE_HOME/dbs/spfiletest.ora
将显示的文件内容复制并粘贴到HOSTB主机的$ORACLE_HOME/dbs/inittest.ora文件中。
由于HOSTA和HOSTB的内存容量可能不同,所以需要根据HOSTB主机的内存大小修改inittest.ora文件。红色字体部分是需要修改的部分。如果不知道这几个参数的值应该配置为多大,可以找一台与HOSTB内存大小一样并安装了ORACLE的主机参考。
如果HOSTA和HOSTB内存大小一样,可以不做修改。
*.audit_file_dest='/u01/app/oracle/admin/test/adump'
*.background_dump_dest='/u01/app/oracle/admin/test/bdump'
*.compatible='
*.control_files='/u02/oracle/oradata/test/control01.ctl','/u02/oracle/oradata/test/control02.ctl','/u02/oracle/oradata/test/control03.ctl'
*.core_dump_dest='/u01/app/oracle/admin/test/cdump'
*.db_block_size=8192
*.db_cache_size=88080384
*.db_domain=''
*.db_file_multiblock_read_count=16
*.db_name='test'
*.db_recovery_file_dest='/u03/oracle/flash_recovery_area'
*.db_recovery_file_dest_size=31457280000
*.dispatchers='(PROTOCOL=TCP) (SERVICE=testXDB)'
*.java_pool_size=4194304
*.job_queue_processes=10
*.large_pool_size=4194304
*.log_archive_format='%t_%s_%r.dbf'
*.open_cursors=300
*.pga_aggregate_target=209715200
*.processes=1000
*.remote_login_passwordfile='EXCLUSIVE'
*.sessions=1105
*.shared_pool_size=142729625
*.undo_management='AUTO'
*.undo_tablespace='UNDOTBS1'
*.user_dump_dest='/u01/app/oracle/admin/test/udump'
根据上述配置文件中蓝色字体所显示的路径,创建目录
以root用户登录,执行
mkdir -p /u01/app/oracle/admin/test/adump
mkdir -p /u01/app/oracle/admin/test/bdump
mkdir -p /u01/app/oracle/admin/test/cdump
mkdir -p /u01/app/oracle/admin/test/dpdump
mkdir -p /u01/app/oracle/admin/test/udump
mkdir -p /u02/oracle/oradata/test
mkdir -p /u03/oracle/flash_recovery_area
chown -R oracle:oinstall /u01 /u02 /u03
orapwd file=/u01/app/oracle/product/
恢复
(除特别说明外,以下操作在HOSTB上以oracle用户执行)
恢复控制文件
在HOSTA中sqlplus下执行命令,获得dbid为1351878041
SQL> select dbid from v$database;
DBID
----------
1351878041
$ sqlplus '/as sysdba'
SQL> startup nomount
export ORACLE_sid=test
export NB_ORA_CLIENT=HOSTA (指定源主机)
$rman catalog rman/rman@catalog target /
RMAN>
set dbid=1351878041
RMAN> RUN {
2> ALLOCATE CHANNEL CH00 TYPE ' SBT_TAPE ';
3> SEND 'NB_ORA_SERV=BAKSERV,NB_ORA_CLIENT=HostA';
4> RESTORE CONTROLFILE;
5> RELEASE CHANNEL CH00;
6> }
恢复完成后,在/u02/oracle/oradata/test/目录下查看应该有3个控制文件被恢复。
恢复数据库
RMAN> alter database mount;
RMAN > run {
ALLOCATE CHANNEL CH00 TYPE 'SBT_TAPE';
SEND 'NB_ORA_SERV=BAKSERV, NB_ORA_CLIENT=HOSTA';
restore database;
}
完成后执行(也可以不操作,因为我们没有恢复归档日志)
$ sqlplus '/as sysdba'
SQL > recover database until cancel;
选择AUTO
然后出现提示找不到归档日志,完成。
SQL > alter database open resetlogs;
至此,数据库的恢复工作已经完成。
其他文件的恢复
如果HOSTA每天作全备份,归档日志可以不用恢复。如果需要恢复,参考以下方法:
RMAN > run {
ALLOCATE CHANNEL CH02 TYPE 'SBT_TAPE';
SEND 'NB_ORA_SERV=BAKSERV, NB_ORA_CLIENT=HOSTA';
RESTORE ARCHIVELOG FROM SEQUENCE 90 thread 1 UNTIL SEQUENCE 91;
RELEASE CHANNEL CH02;
}
完成后执行
$ sqlplus '/as sysdba'
SQL > recover database until cancel;
选择AUTO
然后出现提示找不到归档日志,完成。
启动数据库
SQL > alter database open resetlogs;
注:
1. 若执行该命令时报错:
ORA-01152: file 1 was not restored from a sufficiently old backup
ORA-01110: data file 1: '/u02/oracle/oradata/mingya/system01.dbf'
解决方法参考:“异机恢复后ORA-01152错误解决”。
2. 另外,如果HOSTB恢复成功后导致HOSTA在执行备份时出现:ORA-19625错误。
也可参考:“异机恢复后ORA-01152错误解决”。
至此,数据库的恢复工作已经完成。
此时的数据库dbid与原数据库是一样的,因此,为了让RMAN区别这两个数据库,需要更改恢复出来的数据库dbid。
首先,关闭数据库,再启动到mount状态。
$ sqlplus '/as sysdba'
SQL> shutdown immediate;
SQL> startup mount;
然后执行修改命令:
$ nid target=sys ;执行命令后,数据库将自动关闭。
启动数据库:
$sqlplus '/as sysdba'
SQL> startup mount;
SQL> alter database open resetlogs;
如果需要用RMAN管理的话,重新在RMAN中注册:
$rman target / catalog rman/rman@catalog
RMAN> register database;
假设在恢复数据库时不想恢复SYSAUX表空间,参考以下方法:
RMAN > run {
ALLOCATE CHANNEL CH02 TYPE 'SBT_TAPE';
SEND 'NB_ORA_SERV=BAKSERV, NB_ORA_CLIENT=HOSTA';
RESTORE DATABASE SKIP TABLESPACE SYSAUX;
RECOVER DATABASE SKIP FOREVER TABLESPACE SYSAUX;
RELEASE CHANNEL CH02;
}
其他更多的恢复方法,可以参考RMAN操作手册。
注意事项
主机名问题
在3台主机上配置/etc/hosts文件时,主机名必须和实际主机名完全一致,特别要注意大小写!否则执行备份和恢复操作时,将报错。
配置文件问题
HOSTB主机的inittest.ora文件必须按照实际内存大小修改参数,否则数据库启动时可能报错。例如:
ORA-00371: not enough shared pool memory, should be atleast 142729625 bytes
启动时遇到错误:内存设置的太小,修改initmingya.ora后再启动
4.3 HOSTB数据库文件目录
在
4.4 关于dbid
数据库启动到nomount状态下时,rman无法取得数据库的dbid,rman将无法判断恢复目的地主机的数据库是那个。将报错:RMAN-20005: target database name is ambiguous。所以需要设置dbid。
数据库如果启动到mount状态,就不必设置这个参数了。因为启动到mount,已经加载了控制文件,而dbid参数是保存在控制文件中的。