Rman备份与恢复

1 数据库备份方法

写在最前面:在linux的xshell中使用rman和数据汞,会出现乱码的情况,可以将linux 的语言改为

echo 'LANG="en_US.UTF-8"' > /etc/locale.conf  并source一下。

再确认locale 出来是en_US.UTF-8。可以解决使用rman等的乱码问题。

linux 登陆rman的方法是进入 su - oracle ,即可使用。rman和数据汞。

sql>如果在linux终端中出现乱码,因为oracle 安装就是简体中文。可以在windows 端用navicate或者sqlplus工具打开,不会出现乱码情况。

1.1数据库备份方法分类

1.2 数据库备份方法说明

逻辑备份:指通过逻辑导出对数据进行备份,逻辑备份的数据只能基于备份时刻进行数据转储,所以恢复时也只能恢复到备份时保存的数据。对于备份点和故障点之间的数据,逻辑备份也是无能为力的,所以逻辑备份适合那些很少变化的数据表。如果通过逻辑备份进行全库备份,通常需要重建数据库,对于可用性很高的是数据库,这种恢复时间太长,通常不被使用。由于逻辑备份具有平台无关性,所以更为常见的是,逻辑备份被作为一种数据迁移及移动的主要手段。

物理备份:是指通过物理文件拷贝的方式对数据库进行备份。

冷备份:是指对数据库进行关闭后的的拷贝备份,这样的备份具有一致和完整的时间点数据,恢复时只需恢复所有文件就可以启动数据库。

热备份:进行热备份的数据需要在运行归档模式,热备份时不需要关闭数据库。在进行恢复时,通过备份的数据文件及归档日志等文件,数据库就可以完全恢复,恢复到一致进行到最后一个归档模式。当然,如果是为了恢复某些用户错误,热备份的恢复完全可以在某一个时间点上停止恢复,也就是不完全恢复。

Rman备份是从Oracle8开始提供的用于备份和恢复的强大工具,rman和用户管理备份方式相比,具有一系列的有点;1、备份期间不需要人工介入,从而减少了误操作的可能。2、可以有效的将备份和恢复结合起来。3、支持逻辑备份以外的所有备份类型,包括完全备份、增量备份、表空间备份、数据文件备份、控制文件备份以及归档日志文件备份等。4、方便的实现定期定时的备份。5、自动生成备份日志。等等;从Oracle10g开始,可以对备份集进行压缩,从而减少备份空间的占用。

2  rman备份与恢复

2.1 进入到rman界面

如果本地只有一个实例则命令如下:rman target sys/nocatalog 登录到本系统数据库

如果本地只有多个实例则命令如下:

需要标注标注数据库的sid。

2.1.3  Rman输出日志的生成

    在启动rman时,可以指定日志输出,如果示例中没有指定日志输出,rman就将执行结果直接打印到荧幕上了,如果以后写了一堆超长的rman批处理放在后台执行,最好有执行日志记录下来,以便后期备查,这个时候日志输出功能就用上了。实现这个功能的命令如下:

切勿将命令分开执行,将报错如下,目前猜想应该是window生成rman的日志文件,rman工具本身不具备生成目录的能力。

2.2  rman常见的备份形式

2.2.1 rman备份形式的分类

2.2.2数据库的全备份

步骤一、上面热备份中已经提到,热备份时,数据库徐处于归档模式,故在备份前,需进入到数据库中查看数据库是否处于归档模式。命令如下

步骤二、如步骤一中,查得数据库处于“非存档模式”,现在就需要将数据库转为存档模式。命令如下:

命令行解释:

Shutdown immediate:关闭数据库

Startup  mount :以加载方式启动

Alter database archivelog:修改归档模式

Alter database open:打开数据库

备:(Alter database noarchivelog改为非归档模式)

步骤三、以上准备工作做好后,再进入rman中,进行数据库的全备。

所以同时打开 2个xshell方便管理。

Rman> backup  database;   还要提前确定好备份的路径。不然会存在默认目录

   此命令执行后,将对目标数据库中的所有数据库文件进行备份,由于,没有显式指定format参数,rman会自动为每个备份片命令,并保存在Oracle_home/database目录下。只要数据库的数据量不是很大,整个过程执行速度非常快。

如果需要备份到指定目录,则执行一下命令:

Rman> backup  database format   “E:\logs\%u” (这里改成linux目录)

2.2.3 备份数据库指定文件

     首先可以通过数据字典dba_data_files查询出表空间对应的数据文件及其序号,例如:

 Select file_name,  file_id,  tablespace_name  from dba_data_files;

     如果想查看某个表对应的序号及表空间,可以执行以下代码查看:

  Select  file_name, file_id, tablespace_name   from  dba_data_files   where  file_id   in

(select  distinct  file_id  from dba_extents  where  segment_name='表名');

保存到指定文件夹:

2.3  rman数据恢复

2.3.1  恢复形式分类

2.3.2 rman的全库的恢复

    如果是全库恢复的话,需要关闭数据数据,如果是表空间还原,需要先将表空间离线(offline)状态

2.3.2.1 使用rman进行完全恢复

 过程有三个步骤:

步骤一、启动数据库到加载状态

  Rman> shutdown immediate;

  Rman> startup mount;

步骤二、执行恢复操作,如下图

      Rman> restore database;

步骤三、对数据库进行完全介质恢复,如下图:

      Rman> recover database

restore 只是用备份来还原,recover是用archivelog或者online log

举例说明:

假设我时间点A,做了个备份,时间点B数据库挂了
* restore database ;// 这个操作利用时间点A做的备份来还原,返回到时间点A
* recover database ;//这个操作利用archivelog and online log做recover,从时间点A,推进到时间点B

  • restore 是转储 也是還原被损坏文件(RMAN经常用)
  • recover 是恢复 通过redo log & archive log恢复

2.3.2.2 全库进行不完全恢复

不完全恢复,也就是通过备份文件,恢复某一个误操作或者是某一段时间丢失的数据。不完全恢复可以基于时间,基于SCN,基于日志序列号、基于备份控制文件。本文讲解基于时间点的不完全恢复。

C:\Users\arain>rman target /

RMAN> shutdown immediate;

RMAN> startup mount;

RMAN> list incarnation ;

RMAN> restore database until time "to_date('2017-09-05 17:31:00','yyyy-mm-dd hh2

4:mi:ss')";

RMAN> recover database until time "to_date('2017-09-05 17:31:00','yyyy-mm-dd hh2

4:mi:ss')";

RMAN> alter database open resetlogs;

2.3.2.3 数据库还原到某个时间点

 还原到某个时间点,则是不依赖备份文件,而是依赖归档日志

C:\Users\arain>sqlplus /nolog

SQL> conn / as sysdba

SQL> startup mount

SQL> select * from v$log;--查看最后一次的重置时间

SQL> recover database until time '2017-09-07 12:12:12'

SQL>  alter database open resetlogs;

SQL> shutdown  immediate

SQL> startup

SQL> exit

注:更改命令窗中的时间显示格式

Set nls_data_format=yyyy-mm-dd hh24:mi:ss

2.3.3恢复数据文件

事实上,恢复表空间实际就是恢复其所对应的数据文件(一个表空间可能对应多个数据文件),所以步骤与上相似

步骤一、启动数据库到加载状态,如图

RMAN> SHUTDOWN IMMEDIATE;

RMAN> STARTUP MOUNT; 

步骤二、使要还原的文件处于offline状态

步骤三、进行修复和恢复

rMAN> RESTORE DATAFILE 7;

RMAN> RECOVER DATAFILE 7;

执行完后,再使该文件处于online状态 ,再打开数据库。

3 自动删除归档文件

准备两个文件,一个txt文件,一个bat文件,将bat做成定时执行即可实现自动删除归档文件的功能。

Txt文件 编辑如下:

connect target  /

run{

delete noprompt archivelog all completed before 'sysdate-1';

}

bat文件编辑如下:

rman cmdfile=e:\delete.txt

pause

其中e:\delete.txt为txt所在的地址

4、rman自动备份并删除过期备份集

准备两个文件,一个txt文件,一个bat文件。Bat文件用于定时执行。

Txt文件编辑如下

上面的地址是用于存放备份集的地址,得实现建好,full_data_%d_%T_%s_%p的文件自动生成,其中full_data是前缀可以自由更改,%d即为数据库名,_%T_%s_%p为年月日的日期。如果报错,更多参数可以查看rman>show all。

Bat文件编辑如下:

5 备份恢复八大核心

备份(backup)、还原(把以前的备份copy回来),恢复(recovery,追归档)

1. 数据库要备份,有了备份才能谈还原与恢复。

2. 非归档模式下,因为没有归档文件,所以只能用还原,即将整个库copy回来,谈不上恢复。

3. 为保证数据不丢失,则必需归档,并且redo日志数据不能断。(后面的描述皆为归档模式下的讨论)。

4 . 数据库或者实例的状态,从上到下依次为open、mount、nomount、close。上层问题可以在下层解决,下层问题无法在上层解决。

5 . open状态数据库损坏,能恢复的唯一情况是,非关键数据(关键数据指系统表空间与undo表空间的数据文件)文件损坏。

6. 如果关键数据文件损坏,则只能在mount状态下恢复。另外,不完全恢复也只能在mount状态下进行。

7. 控制文件损坏,则只能在nomount状态下恢复。可使用控制文件镜像或者物理结构改变后的脚本命令(即重建控制文件)进行恢复。

8. 参数文件损坏,新建参数文件,指定db_name参数,启动到nomount状态,然后依次恢复上层数据。参数文件中除db_name外的参数,有备份直接用备份,没有备份就先启动库,再对数据库的性能慢慢调整,至少数据库可以启动了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值