数据库备份按照备份状态分为逻辑备份与物理备份。
(1)逻辑备份
利用SQL从数据库中抽取数据,并存为二进制文件的形式进行备份。业务数据库采用此种方式,不需要在归档模式下。如Oracle中,对数据库对象(用户、表、存储过程)利用EXPORT导出,利用IMPORT把逻辑备份文件导入数据库(Oracle exp/imp)。
优点:可以只备份某些表或某些特定的数据;可以在不同版本之间进行跨平台恢复;可以压缩后存储节省空间。
缺点:对于大规模的数据库,执行语句耗时较长;无法保证完全一致性(如同时有新数据插入)。
(2)物理备份
物理备份是指直接拷贝数据库存储介质上的所有内容,包括操作系统层面和数据库引擎层面,这样就能够完整地还原整个数据库。一般需要外部存储设备。
优点:速度快且可靠;能够提供一致性快照。
缺点:只能提供到“某一时间点”上的恢复,无法选择性地(按表或用户)进行备份和恢复,只能全库备份和恢复;不能用于跨平台迁移。
(3)归档模式与非归档模式
(1)完全备份(Full):备份全部选中文件,并不依赖文件的存档属性来确定备份哪些文件(每个文件都被标记为已备份,消除存档属性)。
(2)差异备份(Differential):备份上次完全备份后发生变化的所有文件(备份后不标记为已备份文件,不消除存档属性)。(备份时间长,占空间多,恢复快)。
(3)增量备份(Incremental):针对上次备份后(无论哪种备份)备份上次备份后所有发生变化的文件(备份后标记文件,消除存档属性)。(备份时间短,占空间少,恢复慢)。
组合示例:
Oracle支持两种类型的逻辑备份:导出/导入实用程序与数据泵。
(1)EXP导出
exp SYSTEM/MANAGER BUFFER=64000 file= C:\full.dmp full=Y
exp detail12/detail12 owner=(detail12,detail11) file=/home/oracle/detail.dmp
exp detail12/detail12@RACDB_192.168.1.13 file=d:/detail.dmp
其中,RACDB_192.168.1.13
为Oracle Net Configuration Assistant的网络服务名。
exp detail12/detail12 owner=detail12 tables=(T_JBXX) file=/home/oracle/t_jbxx.dmp
如果T_JBXX为分区表,使用tables=(T_JBXX1:P1,T_JBXX2:P2
)的形式。
query字段格式:
query="""where dept_date
注意:不导入权限和索引可加入 GRANTS=Y INDEXES=Y
关键字说明
关键字 | 说明 (默认值) |
---|---|
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 模式导出的模板名 |
(2)IMP导入
imp SYSTEM/MANAGER BUFFER=64000 file=C:\full.dmp full=Y
imp detail12/detail12 fromuser=(detail12,detail11) touser=(detail12,detail11) file=/home/oracle/detail.dmp
imp detail12/detail12 owner=detail12 tables=(T_JBXX) file=/home/oracle/t_jbxx.dmp
注意
Full=Y
,或提供fromuser/touser
参数,或提供tables
参数。export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
IGNORE=Y
,不导入权限和索引可加入 GRANTS=Y INDEXES=Y
IMP-00032
错误,表示SQL语句超过缓冲区长度,可以加入选项:buffer=100000000
关键字说明
关键字 | 说明 (默认值) |
---|---|
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) |
(1)数据泵介绍
Oracle Database 10g引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中,与Export / Import相比,它提供更好的性能、安全性和灵活性。
PARALLEL
参数启用),这使得导入和导出任务更加快速和高效。(2)数据泵的使用
EXP和IMP是客户段工具程序,它们既可以在可以客户端使用,也可以在服务端使用。 EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录。因此,使用EXPDP工具时,必须首先建立DIRECTORY对象,并且需要为数据库用户授予使用DIRECTORY对象权限。
使用Data Pump,可将整个数据库或特定模式及其对象(如表格、索引、约束和其数据)导出/导入,还可指定选项,例如表空间、压缩级别、加密和远程导出/导入的网络链接。
Data Pump包括两个客户端实用程序:expdp(Export Data Pump)和impdp(Import Data Pump)。
e.g.
create directory imp_dir as 'D:\imp_dir';
GRANT READ, WIRTE ON DIRECTORY imp_dir TO detail;
expdp scott/tiger DUMPFILE=tmp_dump.dmp DIRECTORY= imp_dir
impdp scott/tiger DUMPFILE=tmp_dump.dmp DIRECTORY= imp_dir