oracle1-冷恢复数据

前几天把C盘重新安装了,以前的oracle11gR2安装和数据都在D盘。需要进行数据恢复处理。

第1步:将原D盘的oracle目录,改个名字,比如加一个后缀_old

第2步:重新安装oracle,同版本,oracle目录、数据库名和以前一样,安装后,重启电脑

第3步:停止oracle相关服务,

第4步:复盖恢复文件

1)data目录

2)flash_recovery_area/orcl/control02.ctl

第5步:重新启动电脑,检查结果,OK,Over

 

 

以下是参考案例:

 

 

说明,只要是同样系统,同样数据库版本,是可以做冷备恢复。冷备份数据必须是数据库不在open状态下。以oracle11gR2为例。

一、冷备份与冷恢复

具体步骤如下。

1. 复制旧的数据库文件

(1) 用SQLPlus连接数据库:
sqlplus 用户名/密码 as sysdba
(2) 关闭DB :
shutdown immediate;
(3) 复制文件到其他地方存储实现备份
1)复制三个文件夹
admin;
oradata(datafile, controlfile,redo【注:数据文件, 控制文件,redo】);
flash_recovery_area三个文件夹
2)dbhome_1下的内容
database(PWDfile、pfile);
dbs(spfile);
NETWORK/ADMIN(listener.ora、tnsnames.ora)。
 

2. Oracle重新建库恢复

(1)创建一个和原来一样的数据库。(安装路径和数据库名必须和原来一致)
(2)停止数据库shutdown immediate;
(3)复制安装目录下的admin、oradata、flash_recovery_area覆盖,复制database(PWDfile、pfile) 覆盖
(4)启动数据库 startup;

 

备注:

无归档模式:将备份文件拷贝回原来的目录即可,然后启动数据库。
归档模式:
①将数据文件、控制文件拷贝回原来目录
②SQL>startup mount;
SQL>recover database using backup controlfile;
③将相应的归档日志和联机日志拖到CMD命令窗口进行跑日志。
④SQL>alter database open resetlogs;

 

3. 软件重装恢复

此时,操作系统重装,如果做冷备恢复,要保证相同操作系统,相同的数据库版本。形势如同异机恢复。

A、不创建实例:(源机上的数据库名字为orcl)

(1) 恢复oradata/orcl目录

在目标机上的oradata目录下建立orcl文件夹,然后进行数据覆盖。

包括数据文件、参数文件、控制文件、日志文件、pwd文件,放在与原系统相同的目录。如果目录有所改变,则需要另外建立控制文件,修改pfile。
 
(2) 恢复admin/orcl目录
在目标机上的admin目录下建立orcl文件夹,然后在orcl里面再建立adump、bdump、cdump、udump、dpdump、pfile六个文件夹

(3) 建立服务
把源机的密码文件拷贝到目标机的database目录下。
使用oradim命令在cmd下oradim -new -sid orcl 表示建立一个服务,sid为orcl(最好名字和源机备份的数据库名字一致,就不需要重建密码文件)。如果是在linux下,不需要此步。
 
(4) 重建创建参数文件、控制文件
拷贝源机的pfile到目标机的一个目录下,修改pfile里面相关文件的路径。
然后通过SQL>create spfile from pfile=‘文件路径'来创建参数文件。
重建控制文件命令:SQL>alter database backup controlfile to trace;
 
然后会在udump文件夹下产生一个追踪文件,打开文件找到如下一段,复制到文本中,修改相应路径然后保存为:createctl.sql文件(sql脚本文件),复制到目标机上。
注意:SQL>alter database backup controlfile to trace as 'F:/DB_RECOVERY/CONTROL_FILE_TRACE.TXT';
复制的原始导出txt中的,相应代码片段如下:
 View Code
 

(5)  数据库设置SID和启动服务

1
2
3
4
5
6
7
8
c:\>set ORACLE_SID=orcl
c:\>sqlplus "/as sysdba"
 
SQL>create spfile from pfile='c:\pfile.txt';
SQL>@c:\createctl.sql;
SQL>shutdown immediate;
SQL>startup;
SQL>alter database open resetlogs;

 

备注:

如果(4)、(5)不好用,可以用下面的方法修改这些路径不一致的问题(反正笔者电脑上冷备份恢复时,上面的两个步骤就不好用):

1)SQL>下执行如下语句,恢复控制文件

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292

2)修改日志、DBF的路径

 修改oracle_home\oradata\orcl下及相关文件的路径

 

(6) TNSNAMES设置
在network\admin下的tnsnames.ora中添加如下片段
1
2
3
4
5
6
7
8
9
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)

(7) 建立监听
用net configuration为orcl实例新建监听
 
至此,冷备份恢复成功。即使你现在用oem打开数据库时发现提示找不到sid ,但实际上你已经成功了,此时只需要重启一下的你的服务器就可以。
 
 

B、创建实例方式(实例SID与源机数据库SID一致)

(1) 替换和覆盖oradata\orcl目录
删除目标机的oradata\orcl底下的所有文件,把源机的所有data文件、redo文件拷贝到此目录下

(2) 密码文件覆盖
删除目标机的密码文件,拷贝源机密码文件到目标机下。

(3) 控制文件恢复
在源机上重建目标机的控制文件:SQL>alter database backup controlfile to trace;然后会在udump文件夹下产生一个追踪文件,打开文件找到上面那段,复制到文本中,修改相应路径然后保存为:createctl.sql文件(sql脚本文件),复制到目标机上。
复制代码代码如下:
1
2
3
4
5
c:\>sqlplus "/as sysdba"
SQL>@c:\createctl.sql;
SQL>shutdown immediate;
SQL>startup;
SQL>alter database open resetlogs;

(4)  在network\admin下的tnsnames.ora中添加如下片段
复制代码代码如下:
1
2
3
4
5
6
7
8
9
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
(5) 用net configuration为orcl实例新建监听
 

二、问题与解决

1. ORA-03113: 通信通道的文件结尾

在从mount状态下,启动时出现;或者从startup命令启动时出现。

详情请参考文章

Oracle错误——ORA-03113:通信通道的文件结尾 解决办法

如何釋放 DB_RECOVERY_FILE_DEST_SIZE

解决方法:

(1) 查看diag\rdbms\oracle\oracle\trace\下的oracle_ora_xxxx.trc错误日志

Oracle出现错误,于是去错误日志里去找问题根源:在 e:\app\kang\diag\rdbms\oracle\oracle\trace\文件夹下找到oracle_ora_6320.trc文件,打开显示错误日志:

 View Code

(2) 找出问题根源

从这里我们发现了问题的根源:

ORA-19815: WARNING: db_recovery_file_dest_size of 4102029312 bytes is 100.00% used, and has 0 remaining bytes available.

是db_recovery_file_dest_size也叫归档日志空间不足导致的,既然找到问题的根源,那解决起来也就容易了。

 (3) 确定解决方法 ---设置归档日志空间的大小

空间小,那摆在我们面前办法就是,一个是将空间设置大点,另一个就是将多余的文件删除掉即可,那么我们就将这两个办法都使用一下。

CMD命令窗口启动:

方法1:设置归档日志空间的大小

复制代码
 
-- at cmd
sqlplus / as sysdba
-- at sql shutdown abort ----关闭进程 startup mount ---- 装载数据库 select * from v$recovery_file_dest; ---查询归档日志
exit
-- at cmd
rman target /
-- at rman db_recovery_file_dest_size = 6442450944; --设置归档日志空间为6G (6*1024*1024*1024) Exit ---到这里空间大小已经设置完成
复制代码

方法2: 删除归档日志

rman target /   -----进入rman工具窗口
RMAN>crosscheck archivelog all;  --运行这个命令可以把无效的expired的archivelog标出来。
RMAN>delete noprompt archivelog until time "sysdate -3";  -- -即删除3天前的归档日志

 2. ORA-39700: database must be opened with UPGRADE option

具体请参考

ORA-00704: bootstrap process failure ORA-39700: database must be opened with UPGRADE option

 

Oracle案例04——ORA-39700: database must be opened with UPGRADE option

 

错误出现的过程

复制代码
SQL> startup
ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它
SQL> shutdown immediate
ORA-01109: 数据库未打开


已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。

Total System Global Area 3340451840 bytes
Fixed Size                  2180344 bytes
Variable Size            1828719368 bytes
Database Buffers         1493172224 bytes
Redo Buffers               16379904 bytes
数据库装载完毕。
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
进程 ID: 7660
会话 ID: 191 序列号: 3


SQL>
复制代码
 

解决方法

通过数据字典升级解决

 
(1)使用 startup upgrade 打开数据库
复制代码
C:\Windows\System32>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on 星期四 8月 9 19:09:30 2018

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

已连接到空闲例程。

SQL> startup upgrade;
ORACLE 例程已经启动。

Total System Global Area 3340451840 bytes
Fixed Size                  2180344 bytes
Variable Size            1828719368 bytes
Database Buffers         1493172224 bytes
Redo Buffers               16379904 bytes
数据库装载完毕。
数据库已经打开。
SQL>
复制代码

 

(2)查看预升级信息

SQL> @$ORACLE_HOME/rdbms/admin/utlu112i.sql

 

(3)执行升级脚本

SQL> @$ORACLE_HOME/rdbms/admin/catupgrd.sql

//这个过程时间比较长, 执行完上面操作执行,也可重新正常打开数据库即可。

 

SQL> @$ORACLE_HOME/rdbms/admin/utlu112s.sql

SQL> @$ORACLE_HOME/rdbms/admin/catuppst.sql

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

 

(4)重启数据库

SQL> shutdown immediate;

ORA-01109: database not open

Database dismounted.

ORACLE instance shut down.

SQL> startup;

 

3. ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项

参考 ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NOR

冷备份1.1中的内容后,在原地回复这些dbf文件,及参数、日志、控制重新覆盖在目标位置后,重新在sqlplus下执行1.2的步骤后,可能会出现如上的错误。解决办法如下:
复制代码
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'E:\ORACLE\ORADATA\EYGLE\SYSTEM01.DBF'

SQL> recover database using backup controlfile;
ORA-00279: 更改 1670743 (在 04/17/2008 14:13:16 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORA92\RDBMS\ARC00030.001
ORA-00280: 更改 1670743 对于线程 1 是按序列 # 30 进行的

指定日志: {=suggested | filename | AUTO | CANCEL}
E:\oracle\oradata\EYGLE\REDO01.LOG
ORA-00310: 存档日志包含序列 29;要求序列 30
ORA-00334: 归档日志: 'E:\ORACLE\ORADATA\EYGLE\REDO01.LOG'

SQL> recover database using backup controlfile;
ORA-00279: 更改 1670743 (在 04/17/2008 14:13:16 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORA92\RDBMS\ARC00030.001
ORA-00280: 更改 1670743 对于线程 1 是按序列 # 30 进行的

指定日志: {=suggested | filename | AUTO | CANCEL}
E:\oracle\oradata\EYGLE\REDO02.LOG
已应用的日志。
完成介质恢复。
SQL> alter database open resetlogs;
数据库已更改。
复制代码
posted @ 2026-01-12 13:33  冬至小孩  阅读(25)  评论(0)    收藏  举报