目录
一、备份和恢复
二、Oracel环境中可能发生的故障类型
三、导入导出程序 exp/imp
四、exp/imp 和数据泵的区别
在Oracle 要有备份才能恢复。Oracle备份分为物理备份和逻辑备份。物理备份,即备份物理文件,如数据文件、日志文件、控制文件、密码文件等。逻辑备份:表、视图、存储过程、数据库对象等。
故障分为四种:语句故障,即SQL语句发生错误发生的故障,Oracle会自己发现语句故障;用户进程故障,当用户程序连接数据库时客户端发生故障,导致客户端死机,用户进程消失。此时Oracle中的PMON会自动把对应的服务进程给停止;实例故障,如Oracle服务端死机,内存崩溃,进程垮掉。此时需要重启Oracle就可以恢复实例故障;介质故障,如硬盘坏掉导致数据文件损坏,此时需要联系DBA进行人工处理恢复。
导出,把数据库中的对象变成二进制文件放在操作系统中;导入,把操作系统的二进制文件变回数据库中载入。传统的导入导出程序在客户端中。在传统数据迁移中,把数据库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
exp system/voapd@orcl tables=(system.salary_tbl) file='D:\sal_bak.dmp' log='D:\sal_bak.log'
log如图:
如果想导出用户所有内容
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
因为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,然后一行一行地设值,不设值就是默认值
第三种导入导出的方式是参数文件的方式
执行导出参数文件。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;
从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