Oracle的备份与恢复详解

来源:百度文库 编辑:神马文学网 时间:2024/04/24 06:05:16
2007-04-30 12:09
为了能有效地备份和恢复数据库,建议大家将数据库修改为归档方式。
数据库的备份
一、物理备份数据库
1、完全数据库脱机备份
A、编写一个要备份的最新文件列表,备份数据文件,日志文件和控制文件。
SQL> select file_name from dba_data_files;
FILE_NAME
------------------------------------------
E:\ORACLE\ORADATA\TRNG2\USERS01.DBF
E:\ORACLE\ORADATA\TRNG2\SYSAUX01.DBF
E:\ORACLE\ORADATA\TRNG2\UNDOTBS01.DBF
E:\ORACLE\ORADATA\TRNG2\SYSTEM01.DBF
SQL> select member from v$logfile;
MEMBER
-----------------------------------
E:\ORACLE\ORADATA\TRNG2\REDO01.LOG
E:\ORACLE\ORADATA\TRNG2\REDO03.LOG
E:\ORACLE\ORADATA\TRNG2\REDO02.LOG
SQL> select name from v$controlfile;
NAME
--------------------------------------
E:\ORACLE\ORADATA\TRNG2\CONTROL01.CTL
E:\ORACLE\ORADATA\TRNG2\CONTROL02.CTL
E:\ORACLE\ORADATA\TRNG2\CONTROL03.CTL
B、用shutdown命令来关闭数据库。
C、用操作系统的备份工具来备份所用数据文件,日志文件和控制文件。
D、重启动数据库。
2、部分数据库联机备份
A、设置表空间为备份状态。
SQL> select tablespace users begin backup;
在备份期间系统拒绝关闭数据库。
B、备份表空间的数据文件。
C、恢复表空间为正常状态。
SQL>alter tablespace users end backup;
3、部分数据库的脱机备份
A、将表空间设置为脱机。
SQL>alter tablespace users offline;
B、备份表空间的数据文件
C、将表空间设置为联机。
SQL>alter tablespace online;
SYSTEM表空间不允许设置为offline。
4、控制文件的在线备份
SQL>alter database backup controlfile to D:\oracle\product\10.2.0\admin\TRNG2\udump\control.backup;
or
SQL>alter database backup controlfile to 'trace;
在       D:\oracle\product\10.2.0\admin\TRNG2\udump\*.trc文件中
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "TRNG2" NORESETLOGS      ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'E:\ORACLE\ORADATA\TRNG2\REDO01.LOG'      SIZE 50M,
GROUP 2 'E:\ORACLE\ORADATA\TRNG2\REDO02.LOG'      SIZE 50M,
GROUP 3 'E:\ORACLE\ORADATA\TRNG2\REDO03.LOG'      SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'E:\ORACLE\ORADATA\TRNG2\SYSTEM01.DBF',
'E:\ORACLE\ORADATA\TRNG2\UNDOTBS01.DBF',
'E:\ORACLE\ORADATA\TRNG2\SYSAUX01.DBF',
'E:\ORACLE\ORADATA\TRNG2\USERS01.DBF'
CHARACTER SET ZHS16GBK
;
-- Commands to re-create incarnation table
-- Below log names MUST be changed to existing filenames on
-- disk. Any one log file from each branch can be used to
-- re-create incarnation records.
-- ALTER DATABASE REGISTER LOGFILE 'D:\ORACLE\PRODUCT\10.2.0\FLASH_RECOVERY_AREA\TRNG2\ARCHIVELOG\2007_04_30\O1_MF_1_1_%U_.ARC';
-- Recovery is required if any of the datafiles are restored backups,
-- or if the last shutdown was not normal or immediate.
RECOVER DATABASE
-- All logs need archiving and a log switch is needed.
ALTER SYSTEM ARCHIVE LOG ALL;
-- Database can now be opened normally.
ALTER DATABASE OPEN;
直接运行上述sql语句可以重新创建控制文件。
二、数据库的逻辑备份
1、逻辑导出
EXP命令用于逻辑导出,使用exp命令有三种导出方式:表方式、用户方式、全部数据库方式。
EXP导出关键字说明:
USERID       用户名/口令               FULL            导出整个文件 (N)
BUFFER       数据缓冲区大小            OWNER            所有者用户名列表
FILE         输出文件 (EXPDAT.DMP)      TABLES         表名列表
COMPRESS      导入到一个区 (Y)       RECORDLENGTH       IO 记录的长度
GRANTS        导出权限 (Y)              INCTYPE         增量导出类型
INDEXES       导出索引 (Y)             RECORD           跟踪增量导出 (Y)
DIRECT        直接路径 (N)             TRIGGERS         导出触发器 (Y)
LOG          屏幕输出的日志文件        STATISTICS        分析对象 (ESTIMATE)
ROWS          导出数据行 (Y)            PARFILE          参数文件名
CONSISTENT 交叉表的一致性 (N)       CONSTRAINTS      导出的约束条件 (Y)
OBJECT_CONSISTENT        只在对象导出期间设置为只读的事务处理 (N)
FEEDBACK                 每 x 行显示进度 (0)
FILESIZE                 每个转储文件的最大大小
FLASHBACK_SCN            用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME           用于获取最接近指定时间的 SCN 的时间
QUERY                    用于导出表的子集的 select 子句
RESUMABLE                遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME           用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT        RESUMABLE 的等待时间
TTS_FULL_CHECK           对 TTS 执行完整或部分相关性检查
TABLESPACES              要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE                 调用 iAS 模式导出的模板名
如:
A、按表方式导出
exp userid=symbols/symbols direct=y tables=(RB_ACCT) file=d:\oracle\backup\RB_ACCT_2007-04_30.dmp log=d:\oracle\backup\RB_ACCT_2007-04_30.log
B、按用户方式导出
exp userid=symbols/symbols direct=y      file=d:\oracle\backup\symbols_2007-04_30.dmp log=d:\oracle\backup\symbols_2007-04_30.log
C、按数据库方式导出
exp userid=system/symbols direct=y full=y file=d:\oracle\backup\symbolfull_2007-04_30.dmp log=d:\oracle\backup\ymbolfull_2007-04_30.log
2、逻辑导入
IMP 逻辑导入关键字:
USERID       用户名/口令               FULL           导入整个文件 (N)
BUFFER       数据缓冲区大小            FROMUSER        所有者用户名列表
FILE         输入文件 (EXPDAT.DMP)      TOUSER         用户名列表
SHOW         只列出文件内容 (N)         TABLES          表名列表
IGNORE       忽略创建错误 (N)        RECORDLENGTH      IO 记录的长度
GRANTS       导入权限 (Y)              INCTYPE         增量导入类型
INDEXES       导入索引 (Y)             COMMIT           提交数组插入 (N)
ROWS         导入数据行 (Y)            PARFILE          参数文件名
LOG         屏幕输出的日志文件        CONSTRAINTS        导入限制 (Y)
DESTROY                    覆盖表空间数据文件 (N)
INDEXFILE                  将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES      跳过不可用索引的维护 (N)
FEEDBACK                   每 x 行显示进度 (0)
TOID_NOVALIDATE            跳过指定类型 ID 的验证
FILESIZE                   每个转储文件的最大大小
STATISTICS                 始终导入预计算的统计信息
RESUMABLE                  在遇到有关空间的错误时挂起 (N)
RESUMABLE_NAME             用来标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT          RESUMABLE 的等待时间
COMPILE                    编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION      导入流的一般元数据 (Y)
STREAMS_INSTANTIATION      导入流实例化元数据 (N)
下列关键字仅用于可传输的表空间
TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)
TABLESPACES 将要传输到数据库的表空间
DATAFILES 将要传输到数据库的数据文件
TTS_OWNERS 拥有可传输表空间集中数据的用户
A、按用户和表的方式导入
imp userid=symbols/symbols file=d:\oracle\backup\symbols_2007-04_30.dmp log=d:\oracle\backup\symbols_2007-04_30.log full=y
B、按数据库导入
imp userid=system/symbols full=y file=d:\oracle\backup\symbolsfull_2007-04_30.dmp log=d:\oracle\backup\symbolsfull_2007-04_30.log
3、表空间的导入导出
A、检查表空间的自包含性。
SQL>exec dbms_tts.transport_set_check('users',true);
SQL>select * from transport_set_voilations;
如果未选定行,表示该表空间是自包含的,否则不得传输。
B、将表空间设置为只读。
SQL>alter tablespace users read only;
C、用exp导出
exp transport_tablespace=yes tabelspaces=users file=users.dmp;
如果要转换到不同平台上,需要使用rman进行转化
SQL〉select d.platform_name,endian_format from v$transportable_platform tp,v$database d where tp.platform_name=d.platform_name;
查询出平台,假如显示是Linux要想windows转移,使用rman工具:
$rman target sys/sys
RMAN>convert tablespace users to platform 'Microsoft Windows NT' format '/temp/%U;
转化完的结果在/temp下
D、复制文件到另外的服务器。
E、用imp导入
imp transport_tablespace=y datafiles=../users.dbf tablespaces=users file=users.dmp;
F、将表空间修改为读写状态。
SQL>alter tablespace users read write;
3、使用数据泵技术对数据库备份和恢复
EXPDP关键字:
ATTACH                 连接到现有作业, 例如 ATTACH [=作业名]。
COMPRESSION            减小有效的转储文件内容的大小
关键字值为: (METADATA_ONLY) 和 NONE。
CONTENT                指定要卸载的数据, 其中有效关键字为:
(ALL), DATA_ONLY 和 METADATA_ONLY。
DIRECTORY              供转储文件和日志文件使用的目录对象。
DUMPFILE               目标转储文件 (expdat.dmp) 的列表,
例如 DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。
ENCRYPTION_PASSWORD    用于创建加密列数据的口令关键字。
ESTIMATE               计算作业估计值, 其中有效关键字为:
(BLOCKS) 和 STATISTICS。
ESTIMATE_ONLY          在不执行导出的情况下计算作业估计值。
EXCLUDE                排除特定的对象类型, 例如 EXCLUDE=TABLE:EMP。
FILESIZE               以字节为单位指定每个转储文件的大小。
FLASHBACK_SCN          用于将会话快照设置回以前状态的 SCN。
FLASHBACK_TIME         用于获取最接近指定时间的 SCN 的时间。
FULL                   导出整个数据库 (N)。
HELP                   显示帮助消息 (N)。
INCLUDE                包括特定的对象类型, 例如 INCLUDE=TABLE_DATA。
JOB_NAME               要创建的导出作业的名称。
LOGFILE                日志文件名 (export.log)。
NETWORK_LINK           链接到源系统的远程数据库的名称。
NOLOGFILE              不写入日志文件 (N)。
PARALLEL               更改当前作业的活动 worker 的数目。
PARFILE                指定参数文件。
QUERY                  用于导出表的子集的谓词子句。
SAMPLE                 要导出的数据的百分比;
SCHEMAS                要导出的方案的列表 (登录方案)。
STATUS                 在默认值 (0) 将显示可用时的新状态的情况下,
要监视的频率 (以秒计) 作业状态。
TABLES                 标识要导出的表的列表 - 只有一个方案。
TABLESPACES            标识要导出的表空间的列表。
TRANSPORT_FULL_CHECK   验证所有表的存储段 (N)。
TRANSPORT_TABLESPACES 要从中卸载元数据的表空间的列表。
VERSION                要导出的对象的版本, 其中有效关键字为:
(COMPATIBLE), LATEST 或任何有效的数据库版本。
下列命令在交互模式下有效。
注: 允许使用缩写
命令                说明
------------------------------------------------------------------------------
ADD_FILE               向转储文件集中添加转储文件。
CONTINUE_CLIENT        返回到记录模式。如果处于空闲状态, 将重新启动作业。
EXIT_CLIENT            退出客户机会话并使作业处于运行状态。
FILESIZE               后续 ADD_FILE 命令的默认文件大小 (字节)。
HELP                   总结交互命令。
KILL_JOB               分离和删除作业。
PARALLEL               更改当前作业的活动 worker 的数目。
PARALLEL=
START_JOB              启动/恢复当前作业。
STATUS                 在默认值 (0) 将显示可用时的新状态的情况下,
要监视的频率 (以秒计) 作业状态。
STATUS[=interval]
STOP_JOB               顺序关闭执行的作业并退出客户机。
STOP_JOB=IMMEDIATE 将立即关闭
数据泵作业。
IMPDP关键字:
ATTACH                 连接到现有作业, 例如 ATTACH [=作业名]。
CONTENT                指定要加载的数据, 其中有效关键字为:
(ALL), DATA_ONLY 和 METADATA_ONLY。
DIRECTORY              供转储文件, 日志文件和 sql 文件使用的目录对象。
DUMPFILE               要从 (expdat.dmp) 中导入的转储文件的列表,
例如 DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。
ENCRYPTION_PASSWORD    用于访问加密列数据的口令关键字。
此参数对网络导入作业无效。
ESTIMATE               计算作业估计值, 其中有效关键字为:
(BLOCKS) 和 STATISTICS。
EXCLUDE                排除特定的对象类型, 例如 EXCLUDE=TABLE:EMP。
FLASHBACK_SCN          用于将会话快照设置回以前状态的 SCN。
FLASHBACK_TIME         用于获取最接近指定时间的 SCN 的时间。
FULL                   从源导入全部对象 (Y)。
HELP                   显示帮助消息 (N)。
INCLUDE                包括特定的对象类型, 例如 INCLUDE=TABLE_DATA。
JOB_NAME               要创建的导入作业的名称。
LOGFILE                日志文件名 (import.log)。
NETWORK_LINK           链接到源系统的远程数据库的名称。
NOLOGFILE              不写入日志文件。
PARALLEL               更改当前作业的活动 worker 的数目。
PARFILE                指定参数文件。
QUERY                  用于导入表的子集的谓词子句。
REMAP_DATAFILE         在所有 DDL 语句中重新定义数据文件引用。
REMAP_SCHEMA           将一个方案中的对象加载到另一个方案。
REMAP_TABLESPACE       将表空间对象重新映射到另一个表空间。
REUSE_DATAFILES        如果表空间已存在, 则将其初始化 (N)。
SCHEMAS                要导入的方案的列表。
SKIP_UNUSABLE_INDEXES 跳过设置为无用索引状态的索引。
SQLFILE                将所有的 SQL DDL 写入指定的文件。
STATUS                 在默认值 (0) 将显示可用时的新状态的情况下,
要监视的频率 (以秒计) 作业状态。
STREAMS_CONFIGURATION 启用流元数据的加载
TABLE_EXISTS_ACTION    导入对象已存在时执行的操作。
有效关键字: (SKIP), APPEND, REPLACE 和 TRUNCATE。
TABLES                 标识要导入的表的列表。
TABLESPACES            标识要导入的表空间的列表。
TRANSFORM              要应用于适用对象的元数据转换。
有效的转换关键字: SEGMENT_ATTRIBUTES, STORAGE
OID 和 PCTSPACE。
TRANSPORT_DATAFILES    按可传输模式导入的数据文件的列表。
TRANSPORT_FULL_CHECK   验证所有表的存储段 (N)。
TRANSPORT_TABLESPACES 要从中加载元数据的表空间的列表。
仅在 NETWORK_LINK 模式导入操作中有效。
VERSION                要导出的对象的版本, 其中有效关键字为:
(COMPATIBLE), LATEST 或任何有效的数据库版本。
仅对 NETWORK_LINK 和 SQLFILE 有效。
下列命令在交互模式下有效。
注: 允许使用缩写
命令                说明 (默认)
------------------------------------------------------------------------------
CONTINUE_CLIENT        返回到记录模式。如果处于空闲状态, 将重新启动作业。
EXIT_CLIENT            退出客户机会话并使作业处于运行状态。
HELP                   总结交互命令。
KILL_JOB               分离和删除作业。
PARALLEL               更改当前作业的活动 worker 的数目。
PARALLEL=
START_JOB              启动/恢复当前作业。
START_JOB=SKIP_CURRENT 在开始作业之前将跳过
作业停止时执行的任意操作。
STATUS                 在默认值 (0) 将显示可用时的新状态的情况下,
要监视的频率 (以秒计) 作业状态。
STATUS[=interval]
STOP_JOB               顺序关闭执行的作业并退出客户机。
STOP_JOB=IMMEDIATE 将立即关闭
数据泵作业。
A、创建一个存储数据泵导出数据的目录。
SQL>create direcotry dpump_dir as '/oracle/oradata/orcl10/pumpdata';
SQL>grant read,write on directory to scott;
设置系统的环境变量:export DATA_PUMP_DIR=dpump_dir
B、进行数据的导入导出
expdp scott/tiger tables=emp dumpfile=emp.dmp directory=dpump_dir(按表导出)
impdp scott/tiger     dumpfile=emp.dmp directory=dpump_dir
expdp scott/tiger     dumpfile=emp.dmp directory=dpump_dir(按用户到出)
impdp scott/tiger     dumpfile=emp.dmp directory=dpump_dir
expdp 'sys/sys as sysdba'     schemas=scott dumpfile=emp.dmp directory=dpump_dir(按方案到出)
impdp 'sys/sys as sysdba'     dumpfile=emp.dmp directory=dpump_dir
表空间和exp,imp步骤相同
expdp system/password     dumpfile=emp.dmp directory=dpump_dir transport_tablespace=users
impdp system/password dumpfile=emp.dmp directory=dpump_dir transport_datafile='../users.dbf'
数据的恢复
一、完全数据库恢复
完全数据库恢复的语法如下:
SQL>alter database recover datafile
SQL>alter database recover database
SQL>recover datafile
SQL>recover database
SQL>recover tablespace
二、不完全数据恢复
1、基于时间的数据库恢复
SQL>alter databse recover database until time
SQL>alter databse recover until time using backup controlfile
SQL>recover database until time
SQL>recover database until time using backup controlfile
2、基于撤销的数据库恢复
SQL>alter database recover database until concel
SQL>recover database until concel
3、基于改变的数据库恢复
SQL>alter database recover database until change
SQL>recover database until change
三、Oracle10g的闪回操作
1、表数据的闪回
SQL>insert into emp (select * from emp as of timestamp to_timestamp('2007-01-01','YYYY-MM-DD HH24:MI:SS);
2、表操作的闪回
SQL>flashback table emp to timestamp to_timestamp('2007-01-01','YYYY-MM-DD HH24:MI:SS);
3、表删除的闪回
SQL>flashback table emp to before drop;
4、数据库的闪回
SQL>flashback database to scn 22222;
SQL>flashback database to timestamp to_timestamp('2007-01-01','YYYY-MM-DD HH24:MI:SS);