Oracle备份与恢复详解
http://www.360doc.com/content/10/1015/15/3267996_61218717.shtml
--------摘自 360doc
为了能有效地备份和恢复数据库,建议大家将数据库修改为归档方式。
数据库的备份
一、物理备份数据库
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=<worker 的数目>。
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=<worker 的数目>。
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);