Jan 14, 2024 No Comments 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数据库备份方法分类** ![](https://www.91vps.cc/usr/uploads/2024/01/586027073.png) ### **1.2 数据库备份方法说明** **逻辑备份**:指通过逻辑导出对数据进行备份,逻辑备份的数据只能基于备份时刻进行数据转储,所以恢复时也只能恢复到备份时保存的数据。对于备份点和故障点之间的数据,逻辑备份也是无能为力的,所以逻辑备份适合那些很少变化的数据表。如果通过逻辑备份进行全库备份,通常需要重建数据库,对于可用性很高的是数据库,这种恢复时间太长,通常不被使用。由于逻辑备份具有平台无关性,所以更为常见的是,逻辑备份被作为一种数据迁移及移动的主要手段。 **物理备份**:是指通过物理文件拷贝的方式对数据库进行备份。 **冷备份**:是指对数据库进行关闭后的的拷贝备份,这样的备份具有一致和完整的时间点数据,恢复时只需恢复所有文件就可以启动数据库。 **热备份**:进行热备份的数据需要在运行**归档模式**,热备份时不需要关闭数据库。在进行恢复时,通过备份的数据文件及归档日志等文件,数据库就可以完全恢复,恢复到一致进行到最后一个归档模式。当然,如果是为了恢复某些用户错误,热备份的恢复完全可以在某一个时间点上停止恢复,也就是不完全恢复。 **R****man备份****:**是从Oracle8开始提供的用于备份和恢复的强大工具,rman和用户管理备份方式相比,具有一系列的有点;1、备份期间不需要人工介入,从而减少了误操作的可能。2、可以有效的将备份和恢复结合起来。3、支持逻辑备份以外的所有备份类型,包括完全备份、增量备份、表空间备份、数据文件备份、控制文件备份以及归档日志文件备份等。4、方便的实现定期定时的备份。5、自动生成备份日志。等等;从Oracle10g开始,可以对备份集进行压缩,从而减少备份空间的占用。 ## **2 rman备份与恢复** ### **2.1 进入到rman界面** 如果本地只有一个实例则命令如下:rman target sys/nocatalog 登录到本系统数据库 ![](https://www.91vps.cc/usr/uploads/2024/01/2075923050.png) 如果本地只有多个实例则命令如下: 需要标注标注数据库的sid。 ![](https://www.91vps.cc/usr/uploads/2024/01/3771974562.png) #### **2.1.3 Rman输出日志的生成** 在启动rman时,可以指定日志输出,如果示例中没有指定日志输出,rman就将执行结果直接打印到荧幕上了,如果以后写了一堆超长的rman批处理放在后台执行,最好有执行日志记录下来,以便后期备查,这个时候日志输出功能就用上了。实现这个功能的命令如下: ![](https://www.91vps.cc/usr/uploads/2024/01/1487050248.png) 切勿将命令分开执行,将报错如下,目前猜想应该是window生成rman的日志文件,rman工具本身不具备生成目录的能力。 ![](https://www.91vps.cc/usr/uploads/2024/01/3010315677.png) ### **2.2 rman常见的备份形式** #### **2.2.1 rman备份形式的分类** ![](https://www.91vps.cc/usr/uploads/2024/01/3564652415.png) #### **2.2.2数据库的全备份** 步骤一、上面热备份中已经提到,热备份时,数据库徐处于归档模式,故在备份前,需进入到数据库中查看数据库是否处于归档模式。命令如下 ![](https://www.91vps.cc/usr/uploads/2024/01/2619328417.png) 步骤二、如步骤一中,查得数据库处于“非存档模式”,现在就需要将数据库转为存档模式。命令如下: ![](https://www.91vps.cc/usr/uploads/2024/01/374936655.png) 命令行解释: Shutdown immediate:关闭数据库 Startup mount :以加载方式启动 Alter database archivelog:修改归档模式 Alter database open:打开数据库 备:(Alter database noarchivelog改为非归档模式) 步骤三、以上准备工作做好后,再进入rman中,进行数据库的全备。 所以同时打开 2个xshell方便管理。 Rman> backup database; 还要提前确定好备份的路径。不然会存在默认目录 此命令执行后,将对目标数据库中的所有数据库文件进行备份,由于,没有显式指定format参数,rman会自动为每个备份片命令,并保存在Oracle\_home/database目录下。只要数据库的数据量不是很大,整个过程执行速度非常快。 ![](https://www.91vps.cc/usr/uploads/2024/01/3302572285.png) 如果需要备份到指定目录,则执行一下命令: Rman> backup database format “E:\\logs\\%u” (这里改成linux目录) ![](https://www.91vps.cc/usr/uploads/2024/01/3930277735.png) #### **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='表名'); ![](https://www.91vps.cc/usr/uploads/2024/01/2976796108.png) ![](https://www.91vps.cc/usr/uploads/2024/01/69961987.png) 保存到指定文件夹: ![](https://www.91vps.cc/usr/uploads/2024/01/715917228.png) ### **2.3 rman数据恢复** #### **2.3.1 恢复形式分类** ![](https://www.91vps.cc/usr/uploads/2024/01/257034597.png) #### **2.3.2 rman的全库的恢复** 如果是全库恢复的话,需要关闭数据数据,如果是表空间还原,需要先将表空间离线(offline)状态 **2.3.2.1 使用rman进行完全恢复** 过程有三个步骤: 步骤一、启动数据库到加载状态 Rman> shutdown immediate; Rman> startup mount; 步骤二、执行恢复操作,如下图 Rman> restore database; ![](https://www.91vps.cc/usr/uploads/2024/01/266314895.png) 步骤三、对数据库进行完全介质恢复,如下图: Rman> recover database ![](https://www.91vps.cc/usr/uploads/2024/01/2216714062.png) **`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 ![](https://www.91vps.cc/usr/uploads/2024/01/537811959.png) #### **2.3.3恢复数据文件** 事实上,恢复表空间实际就是恢复其所对应的数据文件(一个表空间可能对应多个数据文件),所以步骤与上相似 步骤一、启动数据库到加载状态,如图 RMAN> SHUTDOWN IMMEDIATE; RMAN> STARTUP MOUNT; ![](https://www.91vps.cc/usr/uploads/2024/01/1386662439.png) 步骤二、使要还原的文件处于offline状态 ![](https://www.91vps.cc/usr/uploads/2024/01/2114847437.png) 步骤三、进行修复和恢复 rMAN> RESTORE DATAFILE 7; RMAN> RECOVER DATAFILE 7; ![](https://www.91vps.cc/usr/uploads/2024/01/2155256239.png) 执行完后,再使该文件处于online状态 ,再打开数据库。 ![](https://www.91vps.cc/usr/uploads/2024/01/3267450264.png) ## **3 自动删除归档文件** 准备两个文件,一个txt文件,一个bat文件,将bat做成定时执行即可实现自动删除归档文件的功能。 Txt文件 编辑如下: connect target / run{ delete noprompt archivelog all completed before 'sysdate-1'; } bat文件编辑如下: rman cmdfile=e:\\delete.txt pause ![](https://www.91vps.cc/usr/uploads/2024/01/3447923702.png) 其中e:\\delete.txt为txt所在的地址 ## **4、rman自动备份并删除过期备份集** 准备两个文件,一个txt文件,一个bat文件。Bat文件用于定时执行。 Txt文件编辑如下 ![](https://www.91vps.cc/usr/uploads/2024/01/1990024809.png) 上面的地址是用于存放备份集的地址,得实现建好,full\_data\_%d\_%T\_%s\_%p的文件自动生成,其中full\_data是前缀可以自由更改,%d即为数据库名,\_%T\_%s\_%p为年月日的日期。如果报错,更多参数可以查看rman>show all。 Bat文件编辑如下: ![](https://www.91vps.cc/usr/uploads/2024/01/1733675058.png) ## **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外的参数,有备份直接用备份,没有备份就先启动库,再对数据库的性能慢慢调整,至少数据库可以启动了。 最后更新于 2024-01-14 12:22:14 并被添加「」标签,已有 918 位童鞋阅读过。 本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭