Oracle+11g+笔记(8)-备份与恢复机制
8、备份与恢复机制
8.1 备份与恢复的方法
数据库的备份是对数据库信息的一种操作系统备份。这些信息可能是数据库的物理结构文件,也可能是某一部分数
据。在数据库正常运行时,就应该考虑到数据库可能出现故障,而对数据库实施有效的备份,保证可以对数据库进
行恢复。数据库恢复是基于数据库备份的。数据库恢复的方法取决于故障类型、备份方法。
在不同条件下需要使用不同的备份与恢复方法,某种条件下的备份信息只能由对应方法进行还原或恢复。备份与恢
复主要有三种方法:逻辑备份与恢复
、脱机备份与恢复
、联机备份与恢复
。
-
逻辑备份与恢复:用Oracle 提供的实用工具软件,如导出/导入工具(
exp,imp
)、数据泵导入/导出工具(
impdp,expdp
)、装入器(SQL*Loader
),将数据库中的数据进行卸出与装入。 -
脱机备份与恢复:指在关闭数据库的情况下对数据库文件的物理备份与恢复,是最简单、最直接的方法。也称
为冷备份与恢复。
-
联机备份与恢复:指在数据库处于打开的状态下(归档模式)对数据库进行的备伤与恢复。只有能进行联机备份
与恢复的数据库才能实现不停机地使用,也称为备份与恢复。
8.2 使用数据泵进行逻辑备份和恢复
逻辑备份与恢复具有多种方式(数据库级、表空间级、方案级和表级),可实现不同操作系统之间、不同Oracle 版本
之间的数据传输。在此介绍使用数据库泵进行逻辑备份与恢复的方法。
在以前的Oracle
版本中,可以使用exp
和imp
程序进行导出/导入数据。在Oracle 11g
中,又增加了expdp
和
impdp
程序来进行导出/导入数据,并且expdp
与impdp
比exp
与 imp
速度更快。导出数据是指将数据库中的数
据导出到一个导出文件中,导入数据是指将导出文件中的数据导入到数据库中。
使用expdp
和impdp
实用程序时,导出文件只能存放在目录对象指定的操作系统目录中。用CREATE DIRECTORY
语句创建目录对象,它指向操作系统中的某个目录。
格式为:
CREATE DIRECTORY OBJECT_NAME AS 'DIRECTORY_NAME'
其中,OBJECT_NAME
为目录对象名,DIRECTORY NAME
为操作系统目录名,目录对象指向后面的操作系统目录。
提示:数据泵除了可以进行数据库的备份与恢复外,还可以在数据库方案间、数据库间传输数据,实现数据库的升
级和减少磁盘碎片等作用。
# 下面举例创建目录对象并授予对象权限
SQL>CONNECT sys/sysroot;
SQL>create directory dir_obj1 as 'D:\app\zhangshixing\product\11.2.0\oradata\eygle\d1';
SQL>create directory dir_obj2 as 'D:\app\zhangshixing\product\11.2.0\oradata\eygle\d2';
SQL>grant read,write on directory dir_obj1 to scott;
SQL>grant read,write on directory dir_obj2 to scott;
SQL>select * from dba_directories where directory_name like'DIR%';
SQL> select * from dba_directories where directory_name like'DIR%';
OWNER DIRECTORY_NAME
------------------------------ ------------------------------
DIRECTORY_PATH
--------------------------------------------------------------------------------
SYS DIR_OBJ1
D:\app\zhangshixing\product\11.2.0\oradata\eygle\d1
SYS DIR_OBJ2
D:\app\zhangshixing\product\11.2.0\oradata\eygle\d2
8.2.1 使用 expdp 导出数据
expdp
程序的所在路径为:D:\app\zhangshixing\product\11.2.0\dbhome_1\BIN
。
expdp
语句的格式为:
expdp username/password parameter1[,parameter2,...]
其中,username
为用户名,password
为用户密码,parameter1
、parameter2
等参数的名称和功能如表所
示。
使用expdp
程序,可以导出文件、导出表、导出方案、导出表空间等。
8.2.2 使用 impdp导入数据
impdp
程序的所在路径为:D:\app\zhangshixing\product\11.2.0\dbhome_1\BIN
impdp
的语法格式为:
impdp username/password parameter1[,parameter2,...]
其中,username
为用户名,password
为用户密码,parameter1
、parameter2
等参数的名称和功能如表所
示。
使用impdp
程序,可以导入数据、导入表、导入方案、导入表空间等。
8.3 脱机备份与恢复
脱机备份是在关闭数据库后进行的完全镜像备份,其中包括参数文件、网络连接文件、控制文件、数据文件和联机
重做日志文件。脱机恢复是用备份文件将数据库恢复到备份时的状态。
8.3.1 脱机备份
脱机备份是指在数据库处于干净
关闭状态下进行的操作系统备份
,是对于构成数据库的全部文件的备份。需要备份
的文件包括参数文件、所有控制文件、所有数据文件、所有联机重做日志文件。
脱机备份的具体操作过程如下:
# Step1 以SYS用户和SYSDBA身份,在SQL*Plus中,以IMMEDIATE方式关闭数据库
SQL>CONNECT sys/sysroot AS sysdba
SQL>shutdown immediate
# Step2 创建备份文件的目录,如:D:\app\zhangshixing\product\11.2.0\oradata\eygle
# Step3 使用操作系统命令或工具备份数据库所有文件,要备份的控制文件可以通过查询数据字典视图
# v$controlfile看到,要备份的数据文件可以通过查询数据字典视图dba_data_files看到
# 要备份的联机重做日志文件可以通过查询数据字典视图 v$logfile
select * from v$controlfile;
STATUS|NAME |IS_RECOVERY_DEST_FILE|BLOCK_SIZE|FILE_SIZE_BLKS|
------+----------------------------------------------------------+---------------------+----------+--------------+
|D:\APP\ZHANGSHIXING\ORADATA\ORCL\CONTROL01.CTL |NO | 16384| 594|
|D:\APP\ZHANGSHIXING\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL|NO | 16384| 594|
select * from dba_data_files;
FILE_NAME |FILE_ID|TABLESPACE_NAME |BYTES |BLOCKS|STATUS |RELATIVE_FNO|AUTOEXTENSIBLE|MAXBYTES |MAXBLOCKS|INCREMENT_BY|USER_BYTES|USER_BLOCKS|ONLINE_STATUS|
-----------------------------------------------------------+-------+-------------------+---------+------+---------+------------+--------------+-----------+---------+------------+----------+-----------+-------------+
D:\APP\ZHANGSHIXING\ORADATA\ORCL\USERS01.DBF | 4|USERS | 6553600| 800|AVAILABLE| 4|YES |34359721984| 4194302| 160| 5505024| 672|ONLINE |
D:\APP\ZHANGSHIXING\ORADATA\ORCL\UNDOTBS01.DBF | 3|UNDOTBS1 |104857600| 12800|AVAILABLE| 3|YES |34359721984| 4194302| 640| 103809024| 12672|ONLINE |
D:\APP\ZHANGSHIXING\ORADATA\ORCL\SYSAUX01.DBF | 2|SYSAUX |639631360| 78080|AVAILABLE| 2|YES |34359721984| 4194302| 1280| 638582784| 77952|ONLINE |
D:\APP\ZHANGSHIXING\ORADATA\ORCL\SYSTEM01.DBF | 1|SYSTEM |723517440| 88320|AVAILABLE| 1|YES |34359721984| 4194302| 1280| 722468864| 88192|SYSTEM |
D:\APP\ZHANGSHIXING\ORADATA\ORCL\EXAMPLE01.DBF | 5|EXAMPLE |104857600| 12800|AVAILABLE| 5|YES |34359721984| 4194302| 80| 103809024| 12672|ONLINE |
D:\APP\ZHANGSHIXING\PRODUCT\11.2.0\ORADATA\EYGLE\STUD01.DBF| 6|STUDENT_INFORMATION|104857600| 12800|AVAILABLE| 6|NO | 0| 0| 0| 103809024| 12672|ONLINE |
D:\APP\ZHANGSHIXING\PRODUCT\11.2.0\ORADATA\EYGLE\STUD02.DBF| 7|STUDENT_INFORMATION|104857600| 12800|AVAILABLE| 7|NO | 0| 0| 0| 103809024| 12672|ONLINE |
D:\APP\ZHANGSHIXING\PRODUCT\11.2.0\ORADATA\EYGLE\STUD03.DBF| 8|STUDENT_INFORMATION| 2097152| 256|AVAILABLE| 8|NO | 0| 0| 0| 1048576| 128|ONLINE |
D:\APP\ZHANGSHIXING\PRODUCT\11.2.0\ORADATA\EYGLE\TEST01.DBF| 9|TEST | 5242880| 640|AVAILABLE| 9|NO | 0| 0| 0| 4194304| 512|ONLINE |
D:\APP\ZHANGSHIXING\PRODUCT\11.2.0\ORADATA\EYGLE\TEST02.DBF| 10|TEST | 10485760| 1280|AVAILABLE| 10|NO | 0| 0| 0| 9437184| 1152|ONLINE |
D:\APP\ZHANGSHIXING\PRODUCT\11.2.0\ORADATA\EYGLE\TEST03.DBF| 11|TEST | 10485760| 1280|AVAILABLE| 11|NO | 0| 0| 0| 9437184| 1152|ONLINE |
select * from v$logfile;
GROUP#|STATUS|TYPE |MEMBER |IS_RECOVERY_DEST_FILE|
------+------+------+-------------------------------------------+---------------------+
3| |ONLINE|D:\APP\ZHANGSHIXING\ORADATA\ORCL\REDO03.LOG|NO |
2| |ONLINE|D:\APP\ZHANGSHIXING\ORADATA\ORCL\REDO02.LOG|NO |
1| |ONLINE|D:\APP\ZHANGSHIXING\ORADATA\ORCL\REDO01.LOG|NO |
提示:要备份的参数文件存放在主目录中的database
目录中
(D:\app\zhangshixing\product\11.2.0\dbhome_1\dbs
)。
要备份的网络连接文件存放在主目录中的NETWORK\ADMIN
目录中(D:\app\zhangshixing\product\11.2.0\dbhome_1\NETWORK\ADMIN
,如果定制了
SQL*Plus
,还要备份 D:\app\zhangshixing\product\11.2.0\dbhome_1\sqlplus\admin
目录中的文件。
# Step4 备份完成后,如果继续让用户使用数据库,需要以OPEN方式启动数据库
startup open
8.3.2 脱机恢复
脱机恢复的具体操作步骤为:
Step1
:以SYS
用户和SYSDBA
身份,在SQL*Plus
中,以IMMEDIATE
方式关闭数据库。
Step2
:把所有备份文件全部拷贝到原来所在的位置。
Step3
:恢复完成后,如果继续让用户使用数据库,需要以OPEN方式启动数据库。
8.4 联机备份与恢复
可以用恢复管理器(Recovery MANager,RMAN
)来实现联机备份与恢复数据库文件、归档日志和控制文件。
RMAN
程序的所在路径为:D:\app\zhangshixing\product\11.2.0\dbhome_1\BIN
。
RMAN
命令的主要参数有:
-
target
:后面跟目标数据库的连接字符串。 -
catalog
:后面跟恢复目录。 -
nocatalog
:指定没有恢复。
8.4.1 归档日志模式的设置
要使用RMAN
,首先必须将数据库设置为归档日志(ARCHIVELOG
)模式。其具体操作过程如下:
Step1
:以SYS
用户和SYSDBA
身份登录到SQL*Plus
。
Step2
:以IMMEDIATE
方式关闭数据库,同时也关闭了数据库实例,然后以mount
方式启动数据库,此时并没打
开数据库实例。
SQL>CONNECT sys/sysroot AS sysdba
SQL>shutdown immediate
SQL>startup mount
Step3
:把数据库实例从非归档日志模式(NOARCHIVELOG
)切换为归档日志模式(ARCHIVELOG
)。其语句为:
SQL>alter database archivelog;
Step4
:查看数据库实例信息。
SQL>select dbid,name,log_mode,platform_name from v$database;
可以看到当前实例的当前日志模式已经修改为ARCHIVELOG
。
8.4.2 创建恢复目录所用的表空间
需要创建表空间存放与RMAN
相关的数据。打开数据库实例,创建表空间。
SQL>CONNECT sys/sysroot AS sysdba
SQL>alter database open;
SQL>create tablespace rman_ts datafile 'D:\app\zhangshixing\product\11.2.0\oradata\eygle' size 200M;
其中,rman_ts
为表空间名,数据文件为rman ts.dbf
,表空间大小为200M
。
8.4.3 创建RMAN用户并授权
创建用户rman
,密码为zzuli
,默认表空间为rman_ts
,临时表空间为temp
,给rman
用户授予connect
、
recovery_catalog_owner
和 resource
权限。其中,拥有connect
权限可以连接数据库,创建表、视图等数
据库对象;拥有recovery_catalog_owner
权限可以对恢复目录进行管理;拥有resource
权限可以创建表、视
图等数据库对象。
SQL>CONNECT sys/zzuli AS sysdba
SQL>create user rman identified by zzuli default tablespace rman_ts temporary tablespace temp;
SQL>grant connect,recovery_catalog_owner,resource to rman;
8.4.4 创建恢复目录
在RMAN
目录下先运行RMAN
程序打开恢复管理器。
D:\app\zhangshixing\product\11.2.0\dbhome_1\BIN> RMAN catalog rman/zzuli target orc
再使用表空间创建恢复目录,恢复目录为rman ts
。
RMAN>create catalog tablespace rman_ts;
8.4.5 注册目标数据库
只有注册的数据库才可以进行备份和恢复,使用register database
命令可以对数据库进行注册。
RMAN>register database;
8.4.6 使用 RMAN程序进行备份
使用 run
命令定义一组要执行的语句,进行完全数据库备份。
RMAN>run{ allocate channel dev1 type disk;
backup database;
release channel dev1;
}
也可以备份归档日志文件:
RMAN>run{
allocate channel dev1 type disk;
backup archivelog all
release channel dev1;
}
在备份后,可以使用list backup
命令查看备份信息。
RMAN>list backup;
8.4.7 使用RMAN程序进行恢复
要恢复备份信息,可以使用restore
命令还原数据库。如恢复归档日志:
RMAN>run{
allocate channel dev1 type disk;
restore archivelog all;
release channel dev1;
}
8.5 自动备份与恢复
使用闪回(Flashback)技术可以实现基于磁盘上闪回恢复区的自动备份与恢复。
闪回技术包括闪回数据库、闪回表、闪回回收站、闪回查询、闪回版本查询、闪回事务查询等。
8.5.1 闪回数据库
使用闪回数据库可以快速将Oracle数据库恢复到以前的某个时间。要使用闪回数据库,必须首先配置闪回恢复
区:
以SYS
用户以SYSDBA
身份登录SQL*Plus
,对db_recovery_file_dest
进行恢复区位置配置:
D:\app\zhangshixing\product\11.2.0\oradata\eygle\flash_recovery_area
对db_recovery_file_dest_size
进行恢复区大小配置:2G
。
接着在SQL*Plus
中配置闪回数据库。
SQL>CONNECT sys/sysroot AS sysdba
SQL>shutdown immediate
SQL>startup mount
SQL>alter database flashback on;
SQL>alter database open;
设置日期时间显示方式:
SQL>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
从系统视图v$flashback_database_log
中查看闪回数据库日志信息:
SQL>select * from v$flashback_database_log;
使用flashback database
语句闪回恢复的数据库:
SQL>flashback database to timestamp(to_date('2009-05-28 12:30:00','yyyy-mm-dd hh24:mi:ss'));
闪回恢复后,再打开数据库实例时,需要使用 resetlogs
或noresetlogs
参数。
SQL>alter database open resetlogs;
SQL>select * from hr.mydep;
8.5.2 闪回表
使用 flashback table
语句可以闪回表。
【闪回表示例,以下语句将首先删除表hr.mydep1
中的部分记录,然后使用flashback
把删除的记录闪回】
SQL>set time on
SQL>create table hr.mydep1 as select * from hr.department;
SQL>delete from hr.mydep1 where department_id=10;
SQL>flashback table hr.mydep1 to timestamp(to_tate('2009-05-29 10:00:00','yyyy-mm-dd hh24:mi:ss'));
8.5.3 闪回回收站
Oracle中有一个回收站对象(recyclebin
),类似于Windows的回收站,可以使用闪回回收站。
查看回收站中的数据:
SQL>select object_name,original_name,createtime,droptime from DBA_RECYCLEBIN;
从回收站中恢复数据:
SQL>flashback table hr.mydep2 to before drop;
删除回收站中的数据可以使用purge命令:
SQL>purge table hr.mydep1;
清空回收站,可以使用:
SQL>purge dba_recyclebin;
8.5.4 闪回查询
闪回查询可以查询指定时间点表中的数据。要使用闪回查询,必须将UNDO_MANAGEMENT
设置为AUTO
。
SQL>set time on
创建示例表:
SQL>create table hr.mydep4 as select * from hr.departments;
删除记录:
SQL>delete from hr.mydep4 where department_id=300;
SQL>commit;
使用 select 查询不到刚才删除的记录,但使用闪回查询可以找到:
SQL>select * from hr.mydep4 as of timestamp to timestamp(to_tate('2009-05-29 10:00:00','yyyy-mm-dd hh24:mi:ss')) where department_id=300;
8.5.5 闪回版本查询
闪回版本查询可以对查询提交后的数据进行审核。查询方法是在select 语句中使用versions between
子句。
创建一个学生成绩表:
SQL>create table student(name Varchar2(10),score Number);
插入一条记录:
SQL>insert into student values('zs',68);
更新表中数据:
SQL>update student set score=98 where name='zs';
提交:
SQL>commit;
使用闪回版本查询:
SQL>select versions_starttime,versions_operation,name,score from student versions between timestamp minvalue and maxvalue;
8.5.6 闪回事务查询
闪回事务保存在表 flashback_transaction_query
中,对已经提交的事务,也可以通过闪回事务查询。
已经提交的事务,通过闪回事务查询。
SQL>CONNECT sys/sysroot AS sysdba
SQL>select table_name,undo_sql from flashback_transaction_query where rownum<5;
其中,table_name
表示事务涉及的表名,undo_sql
表示撤销事务所要执行的SQL语句。
8.6 几种备份与恢复方法的比较
逻辑备份与恢复是利用实用程序(数据泵)实现数据库、方案、表结构和数据的备份与恢复。有许多可选参数,比脱
机备份与恢复灵活,也能实现数据的传递和数据库的升级。
脱机备份是在关闭掉数据库状态下,把数据库文件拷贝到要备份的地方,脱机恢复是个逆过程。
联机备份与恢复是在数据库打开的状态下使用RMAN技术来备份与恢复。
自动备份与恢复是使用闪回技术实现基于磁盘的自动备份与恢复,大大减少了管理开销。