CentOS下postgres怎么恢复数据库.bak文件_oracle 异机恢复小记

0ec6f414a661a31cb657089f55ba2e74.png

试验环境:

操作系统:redhat 7.5

数据库版本:oracle 11.2.0.4

试验步骤:

1、 异机恢复前,首先需要安装目标数据库,在新的服务器,可以选择只安装oracle软件。

2、 源数据库开启有归档模式,若开启了归档模式,可以手动切换一下日志,确保归档可以正常运行。切换后,可以使用SQL:select name from v$archived_log;查看归档信息。

3、 oracle默认是备份是备份在快速恢复区,若不是以快速恢复区作为备份存放路径,备份路径可以在sqlplus 中,使用命令:show parameter db_recovery_file_dest 查看。

4、 使用rman,对源数据库进行备份,使用命令:rman target / 进入到rman命令行中。

5、 因数据库的快速恢复区有其他备份的文件,这里新建一个/home/oracle/backupset目录,用来存放这次的备份,具体操作按实际情况来,可参照下面语句对数据库进行备份:

RMAN> run {

allocate channel ch1 device type disk;

allocate channel ch2 device type disk;

sql 'alter system archive log current';

backup database format ' /home/oracle/backupset /data_%U.bak';

backup archivelog all format ' /home/oracle/backupset /arch_%U.bak';

backup current controlfile format ' /home/oracle/backupset /ctl_%U.bak';

release channel ch1;

release channel ch2;

}

6、 接着从源数据库中,备份一个pfile文件备用,进入sqlplus命令行中,执行下面的语句,创建pfile文件;create pfile='/home/oracle/backupset/pfile.ora' from spfile;

7、 将备份的拷贝到目标数据库服务器中去。可使用 scp 命令操作,参考命令:

scp -r /home/oracle/backupset [url=]oracle@192.168.xxx.xxx:/home/oracle/[/url]

这是从源数据库操作的命令方式。

scp -r [url=]oracle@192.168.xxx.xxx: /home/oracle/backupset /home/oracle/[/url]

这是从目标数据库服务器操作的命令方式。

8、 使用scp命令将源数据库的密码文件拷贝到目标数据库中:scp $ORACLE_HOME/dbs/orapworcl [url=]oracle@192.168.xxx.xxx:$ORACLE_HOME/dbs/[/url]

9、 根据备份的参数文件,还原audit_file_dest、control_files与恢复区的目录。

使用命令,查看参数文件pfile : Cat/home/oracle/backupset/pfile.ora

范例内容如下:注意的位置,这里标红

orcl.__db_cache_size=452984832

orcl.__java_pool_size=4194304

orcl.__large_pool_size=8388608

orcl.__oracle_base='/u01/app'#ORACLE_BASEset from environment

orcl.__pga_aggregate_target=432013312

orcl.__sga_target=641728512

orcl.__shared_io_pool_size=0

orcl.__shared_pool_size=163577856

orcl.__streams_pool_size=0

*.audit_file_dest='/u01/app/admin/orcl/adump'

*.audit_trail='DB'

*.compatible='11.2.0.0.0'

*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/flash_recovery_area/orcl/control02.ctl'

*.db_block_size=8192

*.db_domain=''

*.db_name='orcl'

*.db_recovery_file_dest_size=4070572032

*.db_recovery_file_dest='/u01/app/flash_recovery_area'

*.diagnostic_dest='/u01/app'

*.dispatchers='(PROTOCOL=TCP)(SERVICE=orclXDB)'

*.event=''

*.log_archive_format='%t_%s_%r.arc'

*.memory_target=1073741824

*.open_cursors=300

*.processes=150

*.remote_login_passwordfile='EXCLUSIVE'

*.undo_tablespace='UNDOTBS1'

这里因为有一个控制文件在快速恢复区中,在创建那个目录时,快速恢复区也创建完成了,所以这里就不再创建快速恢复区

创建目录命令如下:

Mkdir-p /u01/app/admin/orcl/adump

Mkdir -p /u01/app/oracle/oradata/orcl

Mkdir -p /u01/app/flash_recovery_area/orcl

10、 然后以参数文件pfile 将目标数据库启动到nomount状态。

因本机的恢复目录是快速恢复区,故将这些备份的文件,移运到快速恢复区/u01/app/flash_recovery_area下。

在目标数据库中,进入sqlplus命令行。执行SQL语句:startup nomount pfile=‘/u01/app/flash_recovery_area/pfile.ora‘;

11、 启动到nomount状态后,使用SQL语句:createspfile from pfile=‘/u01/app/flash_recovery_area/pfile.ora‘;创建数据库的spfile文件,然后showdown immediate 关闭数据库,以spfile将数据库启动到nomount状态,验证spfile创建是否成功。

12、 还原控制文件,进入rman命令行,使用restorecontrolfile 来还原控制文件,

参照:restorecontrolfile from ' /u01/app/flash_recovery_area/ctl_08uevvek_1_1.bak '

13、 控制文件还原后将数据库启动到mount状态,使用命令:alter database mount 使数据库转到mount 状态。

14、 还原和恢复数据库,接着上面,在rman命令行中,执行命令:restore database; 还原数据库,在数据库还原后,再执行命令:recoverdatabase; 来恢复数据库。在恢复的最后,会有类似下面标红处关于归档日志的提示:

RMAN>recover database;

Startingrecover at 22-OCT-19

using channelORA_DISK_1

startingmedia recovery

channelORA_DISK_1: starting archived log restore to default destination

channelORA_DISK_1: restoring archived log

archived logthread=1 sequence=62

channel ORA_DISK_1:reading from backup piece /home/oracle/backupset/arch_07uevvej_1_1.bak

channelORA_DISK_1: piece handle=/home/oracle/backupset/arch_07uevvej_1_1.baktag=TAG20191022T211042

channelORA_DISK_1: restored backup piece 1

channelORA_DISK_1: restore complete, elapsed time: 00:00:01

archived logfilename=/u01/app/flash_recovery_area/ORCL/archivelog/2019_10_22/o1_mf_1_62_gty1g3f8_.arcthread=1 sequence=62

channeldefault: deleting archived log(s)

archived logfile name=/u01/app/flash_recovery_area/ORCL/archivelog/2019_10_22/o1_mf_1_62_gty1g3f8_.arcRECID=10 STAMP=1022362563

unable tofind archived log

archived logthread=1 sequence=63

RMAN-00571:===========================================================

RMAN-00569:=============== ERROR MESSAGE STACK FOLLOWS ===============

RMAN-00571:===========================================================

RMAN-03002:failure of recover command at 10/22/2019 21:36:04

RMAN-06054: media recovery requesting unknownarchived log for thread 1 with sequence 63 and starting SCN of 1829484

这里根据最后的SCN号,执行命令:recoverdatabase until scn 1829484; 通过归档日志进行最后的数据库恢复。

15、 恢复完成后,将数据库以resetlogs 方式打开。

alter database open resetlogs;

16、 完成后,对数据库恢复情况进行验证

查看恢复的实例:

SQL>select instance_name, status from v$instance;

INSTANCE_NAME STATUS

----------------------------

orcl OPEN

查看数据库的读写模式:

SQL>select dbid, open_mode from v$database;

DBID OPEN_MODE

------------------------------

1549427181READ WRITE

查看数据文件恢复情况:

SQL>select file_name from dba_data_files;

FILE_NAME

--------------------------------------------------------------------------------

/u01/app/oracle/oradata/orcl/users01.dbf

/u01/app/oracle/oradata/orcl/undotbs01.dbf

/u01/app/oracle/oradata/orcl/sysaux01.dbf

/u01/app/oracle/oradata/orcl/system01.dbf

查看重做日志恢复情况:

SQL>select member from v$logfile;

MEMBER

--------------------------------------------------------------------------------

/u01/app/oracle/oradata/orcl/redo03.log

/u01/app/oracle/oradata/orcl/redo02.log

/u01/app/oracle/oradata/orcl/redo01.log

查看重做日志组恢复情况:

SQL>SELECT THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$LOG;

THREAD# SEQUENCE# ARC STATUS

-------------------- --- ----------------

1 1 NO CURRENT

1 0 YES UNUSED

1 0 YES UNUSED

17、创建监听,可以使用netca工具创建监听,或可根据原数据库中的监听文件,在目标库中,创建监听

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值