Oracle 原理:逻辑备份和恢复

目录

一、备份和恢复

二、Oracel环境中可能发生的故障类型

三、导入导出程序 exp/imp

四、exp/imp 和数据泵的区别


一、备份和恢复

在Oracle 要有备份才能恢复。Oracle备份分为物理备份和逻辑备份。物理备份,即备份物理文件,如数据文件、日志文件、控制文件、密码文件等。逻辑备份:表、视图、存储过程、数据库对象等。

二、Oracel环境中可能发生的故障类型

故障分为四种:语句故障,即SQL语句发生错误发生的故障,Oracle会自己发现语句故障;用户进程故障,当用户程序连接数据库时客户端发生故障,导致客户端死机,用户进程消失。此时Oracle中的PMON会自动把对应的服务进程给停止;实例故障,如Oracle服务端死机,内存崩溃,进程垮掉。此时需要重启Oracle就可以恢复实例故障;介质故障,如硬盘坏掉导致数据文件损坏,此时需要联系DBA进行人工处理恢复。

三、导入导出程序 exp/imp

导出,把数据库中的对象变成二进制文件放在操作系统中;导入,把操作系统的二进制文件变回数据库中载入。传统的导入导出程序在客户端中。在传统数据迁移中,把数据库A中的数据导出成数据文件(dmp,csv,tsv,excle,sql文件等),再把这数据文件放入新数据库中执行。其中降低高水位线,可以重新导表来实现(一般是insert into newtable select * from oldtable; truncate table oldtable;insert into oldtable select * from newtable ;)

导入导出有四种模式:数据库模式,导出导入数据库全部对象;表空间模式,导入导出一个或多个表空间中的所有对象;用户模式,导出导入一个用户模式中的所有对象;表模式,导出导入一个或多个表或表分区。

导出exp的常用参数: 在cmd提示符中输入 exp  help=y

参数名 默认值(格式) 说明
USERID username/password@database   指定要登陆用户的账号密码,该参数必须为命令行中第一个参数,例: exp tester/ root指的是用户名为tester,密码是root
FULL FULL=Y/N 是否导出整个数据库
BUFFER BUFFER=数据缓冲区大小 数据缓冲区大小,用于提高exp/imp速度,单位为字节,不能写成buffer=1m的形式,应写成字节为单位的参数,如buffer=1048576
OWNER OWNER=(user1, user2, …) 将拥有者为user1,user2,…的表导出
FILE FILE=example.dmp 指定导出文件的路径和文件名,例:FILE=example.dmp是指将数据导出到example.dmp中
TABLES TABLES=(table1, table2,…) 只导出表table1、table2…
COMPRESS COMPRESS=Y/N 是否对导出文件进行压缩
RECORDLENGTH   IO记录的长度
GRANTS GRANTS=Y/N 是否导出权限
INCTYPE   增量导出的类型
INDEXES INDEXES=Y/N 是否导出索引
RECORD RECORD=Y/N 是否追踪增量导出
DIRECT DIRECT=Y/N 是否是绝对路径
TRIGGERS TRIGGERS=Y/N 是否导出触发器
LOG LOG=exp.log 保存屏幕输出的日志到某文件
STATISTICS STATISTICS=ESTIMATE 分析对象
ROWS ROWS=Y/N 是否导出表中数据行
PARFILE PARFILE=file_name 参数文件,可将exp参数配置写成文件,便于反复调用
CONSISTENT CONSISTENT=Y/N 交叉表是否保持一致性
CONSTRAINTS CONSTRAINTS=Y/N 是否导出约束
OBJECT_CONSISTENT   transaction set to read only during object export (N)
FEEDBACK FEEDBACK=x 每x行显示运行进度
FILESIZE FILESIZE=size 设置导出dmp文件的大小
FLASHBACK_SCN   SCN used to set session snapshot back to
FLASHBACK_TIME   time used to get the SCN closest to the specified time
QUERY QUERY=SQL SQL语句用于数据过滤,例如:QUERY=' where id > 0'将id大于0的数据导出
RESUMABLE   suspend when a space related error is encountered(N)
RESUMABLE_NAME   text string used to identify resumable statement
RESUMABLE_TIMEOUT   wait time for RESUMABLE
TTS_FULL_CHECK   perform full or partial dependency check for TTS
VOLSIZE   number of bytes to write to each tape volume
TABLESPACES TABLESPACES=(ts1, ts2) 导出指定的表空间列表
TRANSPORT_TABLESPACE TRANSPORT_TABLESPACE=Y/N 是否导出可传输的表空间元数据
TEMPLATE   template name which invokes iAS mode export

imp导入常用参数:在cmd提示符中输入 imp  help=y

USERID username/password 指定要登陆用户的账号密码,该参数必须为命令行中第一个参数,例: imp tester/ root指的是用户名为tester,密码是root
FULL FULL=Y/N 是否导入整个数据库
BUFFER BUFFER=数据缓冲区大小 数据缓冲区大小
FROMUSER FROMUSER=(user1, user2, …) 将拥有者为user1,user2,…的数据导入
TOUSER TOUSER=tester 将数据导入到用户tester下
FILE FILE=example.dmp 指定导入文件的路径和文件名,例:FILE=example.dmp是指导入example.dmp
TABLES TABLES=(table1, table2,…) 只导入表table1、table2…
SHOW SHOW=Y/N 只列出文件内容
IGNORE IGNORE=Y/N 是否忽视迁移过程中的创建错误继续导入
RECORDLENGTH   IO记录的长度
GRANTS GRANTS=Y/N 是否导出权限
INCTYPE   增量导入类型
INDEXES INDEXES=Y/N 是否导入索引
COMMIT COMMIT=Y/N 是否提交数组插入
ROWS ROWS=Y/N 是否导入数据行
PARFILE PARFILE=file_name 参数文件,可将exp参数配置写成文件,便于反复调用
LOG LOG=imp.log 将屏幕输出日志导入到指定文件
CONSTRAINTS CONSTRAINTS=Y/N 是否导入约束
DESTROY DESTROY=Y/N 是否覆盖表空间数据文件
INDEXFILE   将表/索引信息写入指定的文件
SKIP_UNUSABLE_INDEXES SKIP_UNUSABLE_INDEXES=Y/N 跳过不可用索引的维护
FEEDBACK FEEDBACK=x 每 x 行显示导入进度
FILESIZE FILESIZE=size 设置导入dmp文件的大小
TOID_NOVALIDATE   跳过指定类型 ID 的验证
STATISTICS   import precomputed statistics (always)
RESUMABLE RESUMABLE=Y/N 在遇到有关空间的错误时挂起
RESUMABLE_NAME   text string used to identify resumable statement
RESUMABLE_TIMEOUT   RESUMABLE 的等待时间
COMPILE COMPILE=Y/N 是否编译存储过程, 包和函数 (Y)
STREAMS_CONFIGURATION STREAMS_CONFIGURATION=Y/N 是否导入streams的一般元数据
STREAMS_INSTANTIATION STREAMS_INSTANTIATION=Y/N 是否导入streams的实例元数据
DATA_ONLY DATA_ONLY=Y/N 是否只导入数据
VOLSIZE   number of bytes in file on each volume of a file on tape

以上表格转载于:https://blog.csdn.net/Loiterer_Y/article/details/84872058

例如导出,在命令提示符中

exp  /@ tables=(,) file= log =

exp system/voapd@orcl tables=(system.salary_tbl) file='D:\sal_bak.dmp' log='D:\sal_bak.log'

log如图:

Oracle 原理:逻辑备份和恢复_第1张图片

如果想导出用户所有内容

exp system/voapd@orcl owner=system file='D:\systemUser.dmp' log='D:\systemUser.log'.

当然有些参数不能同时使用  owner=   和 full=y  等,因为这两个参数不属于同一个模式,不在同一个模式的参数是不能共用的,会造成冲突。

导出成dmp文件后,那就要导入imp

把D:\sal_bak.dmp 的备份表到给voapd 用户

 imp system/voapd@orcl file=D:\sal_bak.dmp tables=(salary_tbl) fromuser=system touser=voapd

Oracle 原理:逻辑备份和恢复_第2张图片

因为system的身份是DBA 所以可以导出给其他普通用户,但是登陆普通用户是无法给其他普通用户导表的。

上述截图有警告和语句执行失败,是因为voapd 用户 已经有salary_tbl 了。避免这样的错误

 imp system/voapd@orcl file=D:\sal_bak.dmp tables=(salary_tbl) fromuser=system touser=voapd  IGNORE=Y     就行了

上面的导入导出方式是命令提示符的方式,还有一种是交互提示符方式,导入直接输入imp , 导出直接输入exp,然后一行一行地设值,不设值就是默认值

Oracle 原理:逻辑备份和恢复_第3张图片

第三种导入导出的方式是参数文件的方式

Oracle 原理:逻辑备份和恢复_第4张图片

执行导出参数文件。exp parfile='大大的.txt';

如果数据迁移量较大,可使用可传输表空间,具体步骤分为几步:

1.检查要传输的表空间是否是自包含的

2.将表空间设成只读

3.exp进行可传输表空间的模式导出

4.将导出的文件和对应的数据文件复制到目标服务器上

5.进行imp可传输表空间的模式进行导入

6.目标数据库上,把表空间设成读写状态。


alter tablespace TESTTBS read only;
create tablespace TESTTBS datafile 'D:\oracle\oradata\ORCL\TESTTBS2.DBF' size 10m;
create table sal_tem tablespace TESTTBS as select * from salary_tbl;
exp 'system/voapd@orcl as SYSDBA' tablespaces=TESTTBS transport_tablespace=Y file='D:\exp_tbl.dmp'
--把表空间文件和对应的数据文件分别赋值到 目标服务器的 D:\exp_tbl.dmp   和  D:\oracle\oradata\voapl2\TESTTBS2.DBF
imp 'system/voapd@voapl2 as SYSDBA' tablespaces=TESTTBS  transport_tablespace=Y file='D:\oracle\exp_tbl.dmp' datafiles='D:\oracle\oradata\voapl2\TESTTBS2.DBF'
alter tablespace TESTTBS read write;

 

四、exp/imp 和数据泵的区别

     从10g开始Oracle有了数据泵的概念。exp/imp 的方法速度太慢,在大型的生产库上十分明显.exp/imp是客户端的工具,而数据泵是服务器端的工具,能够为Oracle 提高并行高速度的大数据迁移。使用数据泵(expdp/impdp)在服务器端使用,使用前需要在数据库中创建一个Directory。

     在expdp进行导出时,Oracle首先会创建MT表,并把导出对象的信息插入到MT表,之后进行导出动作;导出完成后,MT表也导出到转储文件中;导出任务完成后,或者删除了导出任务后,MT表自动删除;如果导出任务异常终止,MT表仍然保留。expdp有四种模式,和刚才的exp的模式一样。在cmd命令行中  expdp help=y  查看参数帮助文档。


数据泵导出实用程序提供了一种用于在 Oracle 数据库之间传输
数据对象的机制。该实用程序可以使用以下命令进行调用:

   示例: expdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

您可以控制导出的运行方式。具体方法是: 在 'expdp' 命令后输入
各种参数。要指定各参数, 请使用关键字:

   格式:  expdp KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
   示例: expdp scott/tiger DUMPFILE=scott.dmp DIRECTORY=dmpdir SCHEMAS=scott
               或 TABLES=(T1:P1,T1:P2), 如果 T1 是分区表

USERID 必须是命令行中的第一个参数。以下是可用关键字和它们的说明。方括号中列出的是默认值。

ATTACH 连接到现有作业。例如, ATTACH=job_name。
COMPRESSION 减少转储文件大小。有效的关键字值为: ALL, DATA_ONLY, [METADATA_ONLY] 和 NONE。
CONTENT 指定要卸载的数据。有效的关键字值为: [ALL], DATA_ONLY 和 METADATA_ONLY。
DATA_OPTIONS 数据层选项标记。有效的关键字值为: XML_CLOBS。
DIRECTORY 用于转储文件和日志文件的目录对象。
DUMPFILE 指定目标转储文件名的列表 [expdat.dmp]。例如, DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。
ENCRYPTION 加密某个转储文件的一部分或全部。有效的关键字值为: ALL, DATA_ONLY, ENCRYPTED_COLUMNS_ONLY, METADATA_ONLY 和 NON。
ENCRYPTION_ALGORITHM 指定加密的方式。有效的关键字值为: [AES128], AES192 和 AES256。
ENCRYPTION_MODE 生成加密密钥的方法。有效的关键字值为: DUAL, PASSWORD 和 [TRANSPARENT]。
ENCRYPTION_PASSWORD 用于在转储文件中创建加密数据的口令密钥。
ESTIMATE 计算作业估计值。有效的关键字值为: [BLOCKS] 和 STATISTICS。
ESTIMATE_ONLY 计算作业估计值而不执行导出。
EXCLUDE 排除特定对象类型。例如, EXCLUDE=SCHEMA:"='HR'"。
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 用于导出表的子集的谓词子句。例如, QUERY=employees:"WHERE department_id > 10"。
REMAP_DATA 指定数据转换函数。例如, REMAP_DATA=EMP.EMPNO:REMAPPKG.EMPNO。
REUSE_DUMPFILES 覆盖目标转储文件 (如果文件存在) [N]。
SAMPLE 要导出的数据的百分比。
SCHEMAS 要导出的方案的列表 [登录方案]。
SOURCE_EDITION 用于提取元数据的版本。
STATUS 监视作业状态的频率, 其中默认值 [0] 表示只要有新状态可用, 就立即显示新状态。
TABLES 标识要导出的表的列表。例如, TABLES=HR.EMPLOYEES,SH.SALES:SALES_1995。
TABLESPACES 标识要导出的表空间的列表。
TRANSPORTABLE 指定是否可以使用可传输方法。有效的关键字值为: ALWAYS 和 [NEVER]。
TRANSPORT_FULL_CHECK 验证所有表的存储段 [N]。
TRANSPORT_TABLESPACES 要从中卸载元数据的表空间的列表。
VERSION 要导出的对象版本。有效的关键字值为: [COMPATIBLE], LATEST 或任何有效的数据库版本。

下列命令在交互模式下有效。注: 允许使用缩写。
 

ADD_FILE 将转储文件添加到转储文件集。
CONTINUE_CLIENT 返回到事件记录模式。如果处于空闲状态, 将重新启动作业。
EXIT_CLIENT 退出客户机会话并使作业保持运行状态。
FILESIZE 用于后续 ADD_FILE 命令的默认文件大小 (字节)。
HELP 汇总交互命令。
KILL_JOB 分离并删除作业。
PARALLEL 更改当前作业的活动 worker 的数量。
REUSE_DUMPFILES 覆盖目标转储文件 (如果文件存在) [N]。
START_JOB 启动或恢复当前作业。有效的关键字值为: SKIP_CURRENT。
STATUS 监视作业状态的频率, 其中默认值 [0] 表示只要有新状态可用, 就立即显示新状态。
STOP_JOB 按顺序关闭作业执行并退出客户机。有效的关键字值为: IMMEDIATE。

 

impdp  help=y 

数据泵导入实用程序提供了一种用于在 Oracle 数据库之间传输
数据对象的机制。该实用程序可以使用以下命令进行调用:

     示例: impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

您可以控制导入的运行方式。具体方法是: 在 'impdp' 命令后输入
各种参数。要指定各参数, 请使用关键字:

     格式:  impdp KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
     示例: impdp scott/tiger DIRECTORY=dmpdir DUMPFILE=scott.dmp

USERID 必须是命令行中的第一个参数。


以下是可用关键字和它们的说明。方括号中列出的是默认值。

ATTACH 连接到现有作业。例如, ATTACH=job_name。
CONTENT 指定要加载的数据。有效的关键字为: [ALL], DATA_ONLY 和 METADATA_ONLY。
DATA_OPTIONS 数据层选项标记。有效的关键字为: SKIP_CONSTRAINT_ERRORS。
DIRECTORY 用于转储文件, 日志文件和 SQL 文件的目录对象。
DUMPFILE 要从中导入的转储文件的列表 [expdat.dmp]。例如, DUMPFILE=scott1.dmp, scott2.dmp, dmpdir:scott3.dmp。
ENCRYPTION_PASSWORD 用于访问转储文件中的加密数据的口令密钥。对于网络导入作业无效。
ESTIMATE 计算作业估计值。有效的关键字为: [BLOCKS] 和 STATISTICS。
EXCLUDE 排除特定对象类型。例如, EXCLUDE=SCHEMA:"='HR'"。
FLASHBACK_SCN 用于重置会话快照的 SCN。
FLASHBACK_TIME 用于查找最接近的相应 SCN 值的时间。
FULL 导入源中的所有对象 [Y]。
HELP 显示帮助消息 [N]。
INCLUDE 包括特定对象类型。例如, INCLUDE=TABLE_DATA。
JOB_NAME 要创建的导入作业的名称。
LOGFILE 日志文件名 [import.log]。
NETWORK_LINK 源系统的远程数据库链接的名称。
NOLOGFILE 不写入日志文件 [N]。
PARALLEL 更改当前作业的活动 worker 的数量。
PARFILE 指定参数文件。
PARTITION_OPTIONS 指定应如何转换分区。有效的关键字为: DEPARTITION, MERGE 和 [NONE]。
QUERY 用于导入表的子集的谓词子句。例如, QUERY=employees:"WHERE department_id > 10"。
REMAP_DATA 指定数据转换函数。例如, REMAP_DATA=EMP.EMPNO:REMAPPKG.EMPNO。
REMAP_DATAFILE 在所有 DDL 语句中重新定义数据文件引用。
REMAP_SCHEMA 将一个方案中的对象加载到另一个方案。
REMAP_TABLE 将表名重新映射到另一个表。例如, REMAP_TABLE=EMP.EMPNO:REMAPPKG.EMPNO。
REMAP_TABLESPACE 将表空间对象重新映射到另一个表空间。
REUSE_DATAFILES 如果表空间已存在, 则将其初始化 [N]。
SCHEMAS 要导入的方案的列表。
SKIP_UNUSABLE_INDEXES 跳过设置为“索引不可用”状态的索引。
SOURCE_EDITION 用于提取元数据的版本。
SQLFILE 将所有的 SQL DDL 写入指定的文件。
STATUS 监视作业状态的频率, 其中默认值 [0] 表示只要有新状态可用, 就立即显示新状态。
STREAMS_CONFIGURATION 启用流元数据的加载
TABLE_EXISTS_ACTION 导入对象已存在时执行的操作。有效的关键字为: APPEND, REPLACE, [SKIP] 和 TRUNCATE。
TABLES 标识要导入的表的列表。例如, TABLES=HR.EMPLOYEES,SH.SALES:SALES_1995。
TABLESPACES 标识要导入的表空间的列表。
TARGET_EDITION 用于加载元数据的版本。
TRANSFORM 要应用于适用对象的元数据转换。有效的关键字为: OID, PCTSPACE, SEGMENT_ATTRIBUTES 和 STORAGE。
TRANSPORTABLE 用于选择可传输数据移动的选项。有效的关键字为: ALWAYS 和 [NEVER]。仅在 NETWORK_LINK 模式导入操作中有效。
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 的数量。
START_JOB 启动或恢复当前作业。有效的关键字为: SKIP_CURRENT。
STATUS 监视作业状态的频率, 其中默认值 [0] 表示只要有新状态可用, 就立即显示新状态。
STOP_JOB 按顺序关闭作业执行并退出客户机。有效的关键字为: IMMEDIATE。
   
--------新建--------新建目录
ORCL>>CREATE DIRECTORY MY_DIR AS 'D:\DIRTEST1';
ORCL>>GRANT READ ,WRITE ON DIRECTORY MY_DIR TO voapd
-----导出voapd 的salary_tbl  ----结尾千万不要乱加分号
cmd >>expdp voapd/voapd@orcl directory=MY_DIR dumpfile=voapd_salary_tbl.dmp tables =(salary_tbl)
----导入到voapl2数据库的system用户
VOAPL2>>CREATE DIRECTORY MY_DIR AS 'D:\DIRTEST1';
cmd>> impdp system/voapd@voapl2 directory=MY_DIR dumpfile=voapd_salary_tbl.dmp REMAP_SCHEMA=voapd:system

 

你可能感兴趣的:(数据库)