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外的参数,有备份直接用备份,没有备份就先启动库,再对数据库的性能慢慢调整,至少数据库可以启动了。