Oracle数据库冷备份与恢复(救命稻草)

说明,只要是同样系统,同样数据库版本,是可以做冷备恢复。冷备份数据必须是数据库不在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中的,相应代码片段如下:

STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS  ARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 100
    MAXINSTANCES 8
    MAXLOGHISTORY 292
LOGFILE
  GROUP 1 ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG‘  SIZE 50M BLOCKSIZE 512,
  GROUP 2 ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG‘  SIZE 50M BLOCKSIZE 512,
  GROUP 3 ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG‘  SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE

DATAFILE
  ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF‘,
  ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF‘,
  ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF‘,
  ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF‘,
  ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF‘,
  ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\YTQ.DBF‘,
  ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\ZJHH‘,
  ‘E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SDE_TBS‘,
  ‘I:\ZJECMS\DB\DB_BK_DATA\RMAN_LOCAL_1805\RMAN_BKUP_1805.DBF‘
CHARACTER SET ZHS16GBK
;

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

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的路径

alter database rename file ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO01.LOG‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\REDO01.LOG‘;
  alter database rename file ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO02.LOG‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\REDO02.LOG‘;
  alter database rename file ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\REDO03.LOG‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\REDO03.LOG‘;

 alter database rename file ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\SYSTEM01.DBF‘;
 alter database rename file ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\SYSAUX01.DBF‘;
 alter database rename file ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\UNDOTBS01.DBF‘;
 alter database rename file ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\USERS01.DBF‘;
 alter database rename file ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\EXAMPLE01.DBF‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\EXAMPLE01.DBF‘;
 alter database rename file ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\YTQ.DBF‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\YTQ.DBF‘;
 alter database rename file ‘E:\APP\ADMINISTRATOR\ORADATA\ORCL\ZJHH‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\ZJHH‘;
 alter database rename file ‘E:\APP\ADMINISTRATOR\PRODUCT\11.2.0\DBHOME_1\DATABASE\SDE_TBS‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\SDE_TBS‘;
 alter database rename file ‘I:\ZJECMS\DB\DB_BK_DATA\RMAN_LOCAL_1805\RMAN_BKUP_1805.DBF‘ to  ‘E:\IDEPROS\oracle_home\oradata\orcl\RMAN_BKUP_1805.DBF‘;

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

(6) TNSNAMES设置

在network\admin下的tnsnames.ora中添加如下片段

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脚本文件),复制到目标机上。
复制代码代码如下:

c:\>sqlplus "/as sysdba"
SQL>@c:\createctl.sql;
SQL>shutdown immediate;
SQL>startup;
SQL>alter database open resetlogs;

(4)  在network\admin下的tnsnames.ora中添加如下片段
复制代码代码如下:

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文件,打开显示错误日志:

ORA-19815: WARNING: db_recovery_file_dest_size of 4102029312 bytes is 100.00% used, and has 0 remaining bytes available.
************************************************************************
You have following choices to free up space from recovery area:
1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard,
   then consider changing RMAN ARCHIVELOG DELETION POLICY.
2. Back up files to tertiary device such as tape using RMAN
   BACKUP RECOVERY AREA command.
3. Add disk space and increase db_recovery_file_dest_size parameter to
   reflect the new space.
4. Delete unnecessary files using RMAN DELETE command. If an operating
   system command was used to delete files, then use RMAN CROSSCHECK and
   DELETE EXPIRED commands.
************************************************************************
ORA-19809: limit exceeded for recovery files
ORA-19804: cannot reclaim 38451712 bytes disk space from 4102029312 limit
*** 2018-08-09 17:47:48.882 4132 krsh.c
ARC1: Error 19809 Creating archive log file to ‘E:\IDEPROS\ORACLE_HOME\FLASH_RECOVERY_AREA\ORCL\ARCHIVELOG\2018_08_09\O1_MF_1_5330_%U_.ARC‘
*** 2018-08-09 17:47:48.882 2747 krsi.c
krsi_dst_fail: dest:1 err:19809 force:0 blast:1
DDE rules only execution for: ORA 312
----- START Event Driven Actions Dump ----
---- END Event Driven Actions Dump ----
----- START DDE Actions Dump -----
Executing SYNC actions
----- START DDE Action: ‘DB_STRUCTURE_INTEGRITY_CHECK‘ (Async) -----
DDE Action ‘DB_STRUCTURE_INTEGRITY_CHECK‘ was flood controlled
----- END DDE Action: ‘DB_STRUCTURE_INTEGRITY_CHECK‘ (FLOOD CONTROLLED, 0 csec) -----
Executing ASYNC actions
----- END DDE Actions Dump (total 0 csec) -----
*** 2018-08-09 17:47:48.882 4529 kcrr.c
ORA-16038: log 2 sequence# 5330 cannot be archived
ORA-19809: limit exceeded for recovery files
ORA-00312: online log 2 thread 1: ‘E:\IDEPROS\ORACLE_HOME\ORADATA\ORCL\REDO02.LOG‘

(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;
数据库已更改。

冷备份1.1中的内容后,在原地回复这些dbf文件,及参数、日志、控制重新覆盖在目标位置后,重新在sqlplus下执行1.2的步骤后,可能会出现如上的错误。解决办法如下:

按 Ctrl+C 复制代码

按 Ctrl+C 复制代码

参考

ORACLE冷备份及恢复

怎样恢复Oracle冷备份

原文地址:https://www.cnblogs.com/jijm123/p/12397316.html

时间: 2024-10-11 13:12:37

Oracle数据库冷备份与恢复(救命稻草)的相关文章

Oracle数据库的备份与恢复

Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份.导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/导入(Export/Import) 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去. 1. 简单导出数据(Export)和导入数据(Import) Oracle支持三种方式类型的输出: (1).表方式(T方式),将指定表的数据导出. (2).用户方式(U方式),将指定用户的所有

oracle数据库的备份与恢复(expdp与impdp)

参考:http://blog.csdn.net/oraclemch/article/details/5551634 oracle 11g 初学者指南 http://www.cnblogs.com/netsql/articles/1745978.html 网上的资料都很零碎,而且大部分都不能完成要求的功能,所以做了些整理与完善 准备工作 1 在环境变量中队bin目录进行配置.默认情况下,安装oracle数据库时,将自动配置相应的环境变量, 例如D:/oracle/product/10.2.0/db

Windows系统下Oracle数据库冷备

一.背景: 具体的场景是数据库不是普通的OLTP系统,更像是OLAP系统,数据的更新频率很低,在noarchivelog 模式下运行,实时性要求低,但是数据只有一份不能弄丢,需要应付磁盘损坏等情况.这应该是冷备的一个比较好的应用场景. 二.规划: 将数据库服务器多挂载一块磁盘.查出Oracle datafile,controlfile,spfile,redologfile,tempfile的具体位置,拼凑出bat命令,在sqlplus上执行.通过windows的任务计划定时调度. 三.详细步骤:

oracle 数据库的备份与恢复

物理备份是对数据库的操作系统物理文件(如数据文件.控制文件.和日志文件等)的备份 逻辑备份是对数据库逻辑组件(如表 视图和储存过程等数据库对象)的备份 故障类型 导致数据库操作中止的故障包括四种类型: 故障类型 1.语句故障 2.用户进程故障 3.实例故障 4.介质故障 在执行sql语句过程中发生的逻辑故障可导致语句故障.如果用户编写的SQL无效,就会发生逻辑故障. 当用户程序出错而无法访问数据时发生用户进程故障.导致用户进程故障的原因是异常断开连接或异常终止进程. 当oracle的数据库实例由

数据库的备份与恢复(oracle 11g) (转)

一.       内容与步骤 (注意这里许多步骤需要同学们查资料,理解并消化后才能完成) 1.数据库创建 (1)   安装Oralce11g: (2)   创建至少两个以上用户: (3)   每个用户下建立三个以上表,并插入30条以上记录: (4)   每个用户下创建至少一个存储过程,一个触发器. 2.逻辑备份与恢复 (1)用exp或expdp 导出某个用户: (2)删除该用户: (3)重新创建删除的用户(同名),并赋予相同的权限: (4)用imp或impdp导入该用户的数据,并查询数据表,存储

ORACLE冷备份与恢复

原文:ORACLE冷备份与恢复 ORACLE备份和恢复有三种方式: (1)数据泵(expdp/impdp) (2)冷备份 (3)RMAN备份 就分类而言,(1)和(2)统有称为"冷"备份,(3)称为"热"备份. 数据泵和冷备份只能将数据库还原到某个时间点上(就是备份的时间点),而RMAN备份在归档模式下,能够实时备份,实时还原,几乎可以做到数据无丢失,但对于数据仓库而言,开归档是很可怕的事情,因为归档日志很大,当然如果有必要也是可以开启的,需要做好ARCHIVELO

Oracle数据库备份与恢复的三种方法

转自blueskys567原文Oracle数据库备份与恢复的三种方法, 2006-10. 有删改 Oracle数据库有三种标准的备份方法,它们分别是导出/导入(EXP/IMP).热备份和冷备份. 导出备件是一种逻辑备份,冷备份和热备份是物理备份. 一. 导出/导入(Export/Import) 利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送回到Oracle数据库中去. 1. 简单导出数据(Export)和导入数据(Import) Oracle支持三种方式类型的

Oracle数据库用户数据完整备份与恢复

使用PLSQL-Developer工具可以快速便捷地完成Oracle数据库用户.表的备份恢复. Oracle数据库用户数据完整备份与恢复 1. 备份 1.1   PL/SQL->工具->导出用户对象,选项如图 常用的用户对象包括: TABLE,SEQUENCE,VIEW,PACKAGE,TYPE,FUNCTION,PROCEDURE,PACKAGE BODY,TREGGER 选择需要导入的用户对象,导出.sql文件,此步骤导出的是建表语句,包括存储过程.触发器.视图等 . 1.2  PL/SQ

Oracle数据库泵的备份与恢复

Oracle数据库泵的备份与恢复 目录 一.数据库备份和恢复前的准备... 1 1.给数据库用户授权并创建DIRECTORY对象... 1_Toc388455817 二.数据泵的备份和恢复... 1 1.      数据库备份... 1 2.      数据库恢复... 2 三.进入交互模式... 4 一.数据库备份和恢复前的准备 1.给数据库用户授权并创建DIRECTORY对象 在SQL命令行下执行如下命令(执行sql的用户要有目录创建和授权的权限): grant create any dir