数据库备份

  • 1. 数据库备份的分类
    • 1.1 逻辑备份与物理备份
    • 1.2 完全备份/差异备份/增量备份
  • 2. Oracle 逻辑备份
    • 2.1 EXP/IMP
    • 2.2 EXPDP/IMPDP

1. 数据库备份的分类

1.1 逻辑备份与物理备份

数据库备份按照备份状态分为逻辑备份与物理备份。

(1)逻辑备份

利用SQL从数据库中抽取数据,并存为二进制文件的形式进行备份。业务数据库采用此种方式,不需要在归档模式下。如Oracle中,对数据库对象(用户、表、存储过程)利用EXPORT导出,利用IMPORT把逻辑备份文件导入数据库(Oracle exp/imp)。

优点:可以只备份某些表或某些特定的数据;可以在不同版本之间进行跨平台恢复;可以压缩后存储节省空间。

缺点:对于大规模的数据库,执行语句耗时较长;无法保证完全一致性(如同时有新数据插入)。

(2)物理备份

物理备份是指直接拷贝数据库存储介质上的所有内容,包括操作系统层面和数据库引擎层面,这样就能够完整地还原整个数据库。一般需要外部存储设备。

优点:速度快且可靠;能够提供一致性快照。

缺点:只能提供到“某一时间点”上的恢复,无法选择性地(按表或用户)进行备份和恢复,只能全库备份和恢复;不能用于跨平台迁移。

  • 冷备份:发生在数据库已经正常关闭的情况下(脱机状态),所有的数据文件都处于离线状态。在实施备份过程中,数据库不能做其他工作,可以保证数据的完整性和一致性。
  • 热备份:在数据库运行情况下(联机状态)进行,不会影响正常的业务操作,可在表空间或数据库文件级备份,并且对用户透明,能够保持业务连续性,备份时间短,可达到秒级恢复(恢复到某一时间点)。热备份要将日志置为归档模式,需要考虑到正在写入或修改的数据可能导致数据不一致性问题,采取特殊措施来确保数据完整性。

(3)归档模式与非归档模式

  • 归档模式:归档模式下,数据库将历史记录保存到一组称为“归档日志”的特殊文件中。这些日志包含先前已提交的事务的详细信息,使得可以恢复或还原丢失或损坏的数据。由于需要频繁地写入日志文件,性能会有所降低。
  • 非归档模式:非归档模式下,当一个事务被提交时,其结果直接写入主要数据文件中。而不像归档模式那样额外生成日志文件。这种方式虽然可以提高性能,并降低空间开销,但也存在数据丢失或损坏时无法完全恢复的风险。

1.2 完全备份/差异备份/增量备份

(1)完全备份(Full):备份全部选中文件,并不依赖文件的存档属性来确定备份哪些文件(每个文件都被标记为已备份,消除存档属性)。

(2)差异备份(Differential):备份上次完全备份后发生变化的所有文件(备份后不标记为已备份文件,不消除存档属性)。(备份时间长,占空间多,恢复快)。

(3)增量备份(Incremental):针对上次备份后(无论哪种备份)备份上次备份后所有发生变化的文件(备份后标记文件,消除存档属性)。(备份时间短,占空间少,恢复慢)。

组合示例:

  • 完备+差备:周一进行完全备份,周二到周五进行差异备份。若周五数据被破坏,需还原周一的完全备份及周五的差异备份。
  • 完备+增备:周一进行完全备份,周二到周五机型增量备份。若周五数据被破坏,需还原周一的完全备份及周二至周五的增量备份。

2. Oracle 逻辑备份

Oracle支持两种类型的逻辑备份:导出/导入实用程序与数据泵。

2.1 EXP/IMP

(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<to_date('2014-02-01 00:00:10','yyyy-mm-dd hh24:mi:ss')"""

注意:不导入权限和索引可加入 GRANTS=Y INDEXES=Y

关键字说明

关键字说明 (默认值)
USERID用户名/口令
FULL导出整个文件 (N)
BUFFER数据缓冲区大小
OWNER所有者用户名列表
FILE输出文件 (EXPDAT.DMP)
TABLES表名列表
COMPRESS导入到一个区 (Y)
RECORDLENGTHIO 记录的长度
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_TIMEOUTRESUMABLE 的等待时间
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

注意

  • IMP导入必须指定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)
RECORDLENGTHIO 记录的长度
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_TIMEOUTRESUMABLE 的等待时间
COMPILE编译过程, 程序包和函数 (Y)
STREAMS_CONFIGURATION导入流的一般元数据 (Y)
STREAMS_INSTANTIATION导入流实例化元数据 (N)

2.2 EXPDP/IMPDP

(1)数据泵介绍

Oracle Database 10g引入了最新的数据泵(Data Dump)技术,使DBA或开发人员可以将数据库元数据(对象定义)和数据快速移动到另一个oracle数据库中,与Export / Import相比,它提供更好的性能、安全性和灵活性。

  • 并行处理: Oracle 数据泵支持并行处理(通过指定 PARALLEL 参数启用),这使得导入和导出任务更加快速和高效。
  • 可定制: 数据泵允许用户选择要包含或排除的对象类型(如表、视图、约束等),以及要包含或排除的特定对象。
  • 压缩: Oracle 数据泵支持压缩功能,可减少导出文件的大小,并提高传输速度。
  • 安全性: 数据泵支持 SSL 加密协议来保护敏感信息,在安全方面非常有优势。
  • 多平台兼容性: Oracle 数据泵支持多个平台上运行,例如 Windows 和 Linux 等操作系统。

(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.dmpDIRECTORY= imp_dir
impdp scott/tiger DUMPFILE=tmp_dump.dmpDIRECTORY= imp_dir