Noname
Noname

Oracle rman 备份与异机恢复

RMAN 异机恢复教程(Windows为例)

一、查询源库相关信息

1、dbid

SQL> select dbid from v$database;
DBID
----------
1580017382

2、数据文件

SQL> select file_id, file_name from dba_data_files;
FILE_ID ----------  FILE_NAME
---------------------------------------------------------------------
4 E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
3 E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF
2 E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF
1 E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF
5 E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST1.DBF
6 E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST2.DBF

3、日志文件

SQL> select member from v$logfile;
MEMBER
----------------------------------------------
E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG
E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG
E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG

4、控制文件

SQL> show parameter control_files;
NAME  TYPE  VALUE
------------------------------------
control_files  string  E:\APP\ADMINISTRATOR\ORADATA\ORCL\CONTROL01.CTL, E:\APP\ADMINISTRATOR\FAST_RECOVERY_AREA\ORCL\CONTROL02.CTL

5、参数文件

SQL> show parameter spfile;
NAME  TYPE  VALUE
------------------------------------
spfile  string  E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SPFILEORCL.ORA

6、临时文件

SQL> select file_id,tablespace_name, file_name from dba_temp_files;
ILE_ID TABLESPACE_NAME FILE_NAME
-----------------------------------------------------------------------
1 TEMP E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP01.DBF
2 BDCJY01_TEMP E:\APP\ADMINISTRATOR\ORADATA\ORCL\DB_TEST01_TEMP.DBF

二、完整备份源数据库

要把数据文件、控制文件、归档日志都备份

rman target /
backup incremental level=0 database include current controlfile format 'D:\rman_backup\level0_%d_%s_%p_%u.bak' plus archivelog format 'D:\rman_backup\log_%d_%s_%p_%u.bak';

把备份文件拷贝到恢复库,暂定目录为D:\rman_backup\

三、恢复库基础环境搭建

1、建空实例

oradim -new -sid ORCL -startmode auto -srvcstart system

2、设置dbid

rman>set dbid 1580017382;

3、spfile to pfile

由复制过来的SPFILEORCL.ORA创建pfile文件,并修改对应的地方。
如果对应目录没有文件,需要建目录

SQLplus / as sysdba

(进入空实例)

SQL>create pfile= 'D:\pfile.ora ' from spfile= 'D:\SPFILEORCL.ORA ';

https://blog.cpmsxe.net/wp-content/uploads/2024/08/wp_editor_md_892e6b24d0b352aff534eb4b21630534.jpg

这些目录需对比源库和恢复库的URL进行修改,修改为恢复库的目录。恢复库没有的目录,需要手动建立。恢复库的目录和源库的目录可以不相同。

4、pfile to spfile

SQL>create spfile='D:\SPFILEORCL.ORA' from pfile='D:\pfile.ora';

把spfile文件拷贝到恢复库的$ORACLE_HOME\database下。

SQL>startup nomount;   //利用参数文件把数据库启动到nomount状态

注意:如果没复制spfile,这样操作:
创建一个初始pfile.ora文件,如下:

audit_file_dest=' D:\app\Administrator\admin\ORCL\adump'
compatible='11.2.0'
control_files='D:\app\Administrator\oradata\ORCL\CONTROL01.CTL','D:\app\Administrator\oradata\ORCL\CONTROL02.CTL'
db_block_size=8192
db_name='ORCL'
log_archive_dest=' D:\app\Administrator\archivelog'
log_archive_format='log_%t_%s_%r.arc'
remote_login_passwordfile='EXCLUSIVE'
memory_target=0
undo_management='AUTO'
undo_tablespace='UNDOTBS1'

https://blog.cpmsxe.net/wp-content/uploads/2024/08/wp_editor_md_a57300249d2c0c19fdea9c9f1926120b.jpg

然后由pfile to spfile

PS:另外还可以从备份片中恢复,一般备份集中最小的文件为参数文件。恢复库的路径最好是跟原库一样,就可以不用修改参数。
先用默认的参数文件启动到startup nomount状态,然后在rman中执行

restore spfile to 'D:\SPFILEORCL.ORA' from 'D:\backup\DB_LEVEL0_ORCL_20240801_1131_3B2FL7UQ.BAK'

然后再按照上面的方法转换成pfile。

四、恢复库恢复控制文件

rman target / nocatalog
rman>restore controlfile from 'D:\rman_backup\xxx.bak';

需要指定控制文件的备份文件,一般是最小的备份文件,但是控制文件也可能跟参数文件分开在两个备份片里,所以最小的无法恢复的话,尝试第二小的文件。
等待控制文件恢复完成
控制文件会恢复到pfile指定的目录下

SQL>alter database mount;  //利用恢复的控制文件把数据库启动到mount状态

五、恢复数据文件

1、检查备份集

rman>list backup;

会发现还记录着源库的备份信息,状态: AVAILABLE。但实际上这些备份信息在恢复库是没用,因此需要交叉检查备份信息

rman>crosscheck backup;

会发现原备份信息的状态为过期 状态: EXPIRED

2、注册拷贝过来的备份集

rman>catalog start with 'D:\rman_backup\';

提示是否导入,输入yes,进行备份集的导入。

再交叉检查备份集

rman>crosscheck backup;
rman>list backup;

3、修改恢复数据文件的路径

注:该步骤用在恢复库和源库的目录不一致的情况

1)查看数据文件原路径(查询结果和源数据库数据文件一致)

SQL>select file# , name from v$datafile;
file/grp#----------NAME
-------------------------------------------------------------------------
1  E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF
2  E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF
3  E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF
4  E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
5  E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST1.DBF
6  E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\TEST2.DBF

(推荐)或直接在rman中执行restore database;尝试还原,根据报错的信息查看数据文件编号与其对应的位置

https://blog.cpmsxe.net/wp-content/uploads/2024/08/wp_editor_md_f0a54d79d08de14187bd7154371bbfe9.jpg

2)指定数据文件在恢复库中的路径

建议先在文本文档写好,再在rman运行

run{
set newname for datafile 1 to 'D:\app\Administrator\oradata\ORCL\SYSTEM01.DBF';
set newname for datafile 2 to 'D:\app\Administrator\oradata\ORCL\SYSAUX01.DBF';
set newname for datafile 3 to 'D:\app\Administrator\oradata\ORCL\UNDOTBS01.DBF';
set newname for datafile 4 to 'D:\app\Administrator\oradata\ORCL\USERS01.DBF';
set newname for datafile 5 to 'D:\app\Administrator\oradata\ORCL\TEST1.DBF';
set newname for datafile 6 to 'D:\app\Administrator\oradata\ORCL\TEST2.DBF';
restore database;
switch datafile all;
}

复制到rman窗口运行
等待数据文件恢复完成

如果要恢复到某个时间点

SQL>alter session set nls_date_format= 'yyyy-mm-dd hh24:mi:ss'
RMAN>recover database until time '2024-8-1 14:00:00';

或者恢复到备份集里最新的scn

recover database;
RMAN-03002: recover 命令 (在 08/02/2024 08:36:48 上) 失败
RMAN-06054: 介质恢复正在请求未知的线程 1 序列 105776 的归档日志以及起始 SCN 62897768726

根据报错信息查看备份集里最新的scn号再进行不完全恢复

recover database until scn 62897768726;

3)修改临时文件的路径

以下开始在 sqlplus 执行,非 rman 执行
查询现在的路径

sqlplus / as sysdba
select name from v$tempfile;

修改为期望的路径

alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEMP01.DBF' to 'D:\app\ADMINISTRATOR\oradata\ORCL\temp01.dbf';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\DB_TEST01_TEMP.DBF' to 'D:\app\ADMINISTRATOR\oradata\ORCL\DB_TEST01_TEMP.DBF';

4)修改日志文件的路径

查询现在的路径

select member from v$logfile;

修改为期望的路径

alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG' to 'D:\app\ADMINISTRATOR\oradata\ORCL\REDO01.LOG';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG' to 'D:\app\ADMINISTRATOR\oradata\ORCL\REDO02.LOG';
alter database rename file 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG' to 'D:\app\ADMINISTRATOR\oradata\ORCL\REDO03.LOG';

等待更改完成

4、打开数据库

SQL>alter database open resetlogs;

六、配置监听

恢复库的监听,可以配置为动态监听,也可以配置为静态监听。(也可以用netca来创建监听器)
静态监听如下(目录$ORACLE_HOME\network\admin\listener.ora):

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = testdb)
      (SID_NAME = testdb)
      (ORACLE_HOME = D:\app\Administrator\product\11.2.0\dbhome_1)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.111)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = D:\app\Administrator

七、错误解决方法集

1、提示ORA-00392

如果提示“ORA-00392日志2用于线程1正被清除,不允许操作”错误,需要进行以下操作:

SQL> select GROUP#,STATUS from v$log;
    GROUP# STATUS
---------- ----------------
         1 CLEARING
         3 CLEARING
         2 CLEARING_CURRENT

SQL> alter database clear logfile group 1;
数据库已更改。
SQL> alter database clear logfile group 2;
数据库已更改。
SQL> alter database clear logfile group 3;
数据库已更改。

SQL> select GROUP#,STATUS from v$log;
    GROUP# STATUS
---------- ----------------
         1 UNUSED
         3 UNUSED
         2 CURRENT

之后再打开数据库

SQL>alter database open resetlogs;

2、提示ORA-01157和ORA-01110错误

提示

ORA-01157:无法标识/锁定数据文件201 - 请参阅 DBWR 跟踪文件
ORA-01110:数据文件 201:`D:\\APP\ADMINISTRATOR\\ORACLE\ORCL\\TEMP01.DBF`

检查一下TEMP文件

select tablespace_name, file_name from dba_temp_files;

这样也好重现这个错误

解决方法:
1、关闭、开启数据库,然后去跟踪文件D:\app\administrator\diag\rdbms\orcl\orcl\trace看一下错误提示,一般提示路径不存在。
2、可以照着路径,建一个一样的路径,再启动数据库,就不会报错了。
3、新建一个TEMP02作为默认表空间,然后删除之前的表空间

create temporary tablespace temp02 tempfile 'D:\APP\ADMINISTRATOR\ORACLE\ORCL\TEMP01.DBF\temp02.dbf' size 1g;   //路径自定义
alter database default temporary tablespace temp02;

ps:如果TEMP表空间还有会话在使用,删除TEMP表空间会失败,以下语句是查下TEMP表空间是否还有会话在使用

select m.USERNAME,m.SID,m.SERIAL#,m.SQL_ADDRESS,m.MACHINE,m.PROGRAM,n.TABLESPACE,n.SEGTYPE,n.CONTENTS from v$session m, v$sort_usage n where m.SADDR = n.SESSION_ADDR;

删除掉使用TEMP空间的会话

alter system  kill session  'SID,SERIAL#';

然后再执行

drop tablespace temp including contents and datafiles;

重建并修改默认临时表空间办法:

--查询当前数据库默认临时表空间名
select * from database_properties where property_name='DEFAULT_TEMP_TABLESPACE';
--创建新的临时表空间
create temporary tablespace temp02   tempfile 'E:\oracle\oradata\orcl\TEMP02.DBF' size 1024M autoextend on;
--修改默认表空间为刚刚建立的临时表空间
alter database default temporary tablespace temp02;
--查看用户所用临时表空间的情况
SELECT USERNAME,TEMPORARY_TABLESPACE FROM DBA_USERS;
--删除原来的临时表空间
drop tablespace temp including contents and datafiles;
--查看所有表空间名确认临时表空间是否已删除
select tablespace_name from dba_tablespaces;

发表回复

textsms
account_circle
email

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

Noname

Oracle rman 备份与异机恢复
RMAN 异机恢复教程(Windows为例) 一、查询源库相关信息 1、dbid SQL> select dbid from v$database; DBID ---------- 1580017382 2、数据文件 SQL> select file_id, file_n…
扫描二维码继续阅读
2024-08-02