一、oracle数据备份:exp

关键字     说明(默认值)                  关键字      说明(默认值)

--------------------------------------------------------------------------------------

USERID    用户名/口令                        FULL             导出整个文件 (N  

BUFFER   数据缓冲区大小                 OWNER         所有者用户名列表

FILE     输出文件(EXPDAT.DMP)         TABLES         表名列表

COMPRESS  导入到一个区(Y)      GRANTS        导出权限(Y) (Y)

INDEXES               导出索引(Y)      DIRECT          直接路径(N)

TRIGGERS        导出触发器(Y) (Y) LOG               屏幕输出的日志文件

ROWS                导出数据行(Y)   CONSTRAINTS  导出的约束条件(Y)

FEEDBACK   每x行显示进度(0)

TABLESPACES   要导出的表空间列表

1、一条命令执行exp

 

1.1 指定用户备份

备份命令:(在cmd下)(一定要指定用户)

exp pdmis/pdmis@orcl file=d:\pdmis_2018.dmp log=d:\pdmis_2018.log owner=pdmis rows=y indexes=n buffer=65536

owner=pdmis              导出用户

rows=y                    导出数据行

rows=n                只导出表结构

indexes=n               不导出索引

buffer=65536           exp数据行缓冲区大小>64000

1.2 全局数据库备份

备份命令:(在cmd下)(全局数据库)
exp pdmis/pdmis@orcl file=d:\pdmis_2018.dmp log=d:\pdmis_2018.log full=y

2、分步式执行exp

2.1 分步式指定用户备份 

我们也可以分步式的进行备份

(建议在第一步,指定log文件存储路径,便于后面分析解决问题。)

1)exp bpmis/bpmis@bpmis log=d:\bpmis_20181211.log  回车

exp 用户名/密码@对应的实例(tns名) log=指定路径

 

2)输入数组提取缓冲区大小:4096 >65536                加大缓冲区提高备份速度回车

3)导出文件:EXPDAT.DMP > D:\orcl_backup\bpmis_20181211.dmp      回车

(指定备份文件的存储路径,新建orcl_backup文件夹。bpmis_20181211.dmp文件自动生成至orcl_backup路径下)

 

4)<1>E<完整的数据库>,<2>U<用户>或<3>T<表>:<2>U>     (选择用户) 回车

5)导出权限:默认yes                                 回车

6)导出表数据:默认yes                             回车

7)压缩区:默认yes                                    回车

8)已导出ZHS16GBK 字符集和AL16UTF16 NCHAR 字符集

即将导出指定的用户...
要导出的用户:<按 RETURN 退出>>bpmis (指定用户名)                         回车

 

9)要导出的用户:<按 RETURN 退出>>            (空)  直接回车

开始执行备份...

 

 

2.2 分步式全局数据库备份

分步式备份:(整个数据库)

exp bpmis/bpmis@bpmis log=d:\bpmis_20181211.log  回车   (等待导出log文件)

 

exp bpmis/bpmis@bpmis                             回车

输入数组提取缓冲区大小:4096 > 65536                   回车

导出文件:EXPDAT.DMP > D:\orcl_backup\bpmis_20181211.dmp         回车

<1>E<完整的数据库>,<2>U<用户>或<3>T<表>:<2>U>E(选择完整) 回车

导出权限:默认yes                                 回车

导出表数据:默认yes                               回车

压缩区:默认yes                                      回车

已导出ZHS16GBK 字符集和AL16UTF16 NCHAR 字符集

等待导出整个数据库

 

 

二、oracle 数据还原:imp

 

关键字     说明(默认值)                  关键字           说明(默认值)

--------------------------------------------------------------------------------------

USERID    用户名/口令                         FULL         导出整个文件 (N) 

BUFFER          数据缓冲区大小           FROMUSER   所以者用户

FILE     输入文件(EXPDAT.DMP)         TOUSER         用户列表

GRANTS             导入权限(Y)         TABLES          表名列表

SHOW      只列出文件内容(N)          IGNORE       忽略创建错误(N)

COMMIT       提交数组插入(N)         LOG             屏幕输出的日志文件

ROWS              导出数据行(Y)       CONSTRAINTS       导入限制(Y)

INDEXES              导入索引(Y)       FEEDBACK     每x行显示进度(0)

INDEXFILE           将表/索引信息写入指定的文件

STATISTICS         始终导入预计算的统计信息

 

DATA_ONLY         仅导入数据 (N)           

DESTROY            覆盖表空间数据文件 (N)

 

下列关键字仅用于可传输的表空间

TRANSPORT_TABLESPACE 导入可传输的表空间元数据 (N)

TABLESPACES 将要传输到数据库的表空间

DATAFILES 将要传输到数据库的数据文件

TTS_OWNERS 拥有可传输表空间集中数据的用户

 

1、一条命令执行imp

imp 用户名/密码@对应的实例(tns名)file=需还原的备份文件路径 log=指定路径          

还原命令:(在cmd下)

1.1 备份导入指定用户

imp bpmis/bpmis@pdmis_test fromuser=bpmis touser=bpmis file=d:\oraclebf\yd2y\bpmis_20181207.dmp

log=d:\oraclebf\yd2y\bpmis.log rows=y indexes=n commit=y buffer=3072000 ignore=y

1.2 导入用户下指定表

imp pdmis/pdmis@pdmis_test fromuser=pdmis touser=pdmis commit=y buffer=3072000

file=d:\oraclebf\pdmis\pdmis_20181212\pdmis_20181212V3.DMP ignore=y

tables=(a,b)

参数说明:

rows=y                            导入数据行

fromuser=bpmis     备份数据-源用户

touser=bpmis      导入数据-目标用户

indexes=n                       不导出索引

commit=y                (表示每个数据缓冲满了之后提交一次,而不是导完一张表提交一次,减少对系统回滚段等资源的消耗)

buffer=3072000      imp数据行缓冲区大小>3072000

commit=y+增大buffer空间 (可以加快imp速度)

ignore=y                (如果没有的表,创建并倒入数据,如果已经有的表,忽略创建的,但不忽略倒入表数据。)

tables=(a,b)          导入用户下a表数据和b表数据。

2、分步式执行imp

2.1 分步式指定用户还原-不仅仅导入数据

分布式还原数据库:(不仅仅导入数据)

(建议在第一步指定log文件存储路径,便于后面分析解决问题。)

1)imp bpmis/bpmis@pdmis_test log=d:\oraclebf\yd2y\bpmis.log     回车

      imp 用户名/密码@对应的实例(tns名) log=指定路径

2)仅导入数据:默认NO 回车

 

3) 导入文件:EXPDAT.DMP> d:\oraclebf\yd2y\bpmis_20181207.dmp  回车

(指定导入的备份文件的存储路径)

 

4)输入插入缓冲区大小(最小为8192)30720> 3072000                    回车

5)经由常规路径由 EXPORT:V11.02.00创建的导出文件

已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
只列出导入文件的内容:默认no 回车

6)由于对象已存在,忽略创建错误;默认no 回车

(本例是第一次还原此用户下的数据库,所以默认no。
如果之前用户下已经还原了表结构或还原过早期版本,需要报错此处要选择YES   回车) 

 

7)导入权限:默认yes                                    回车

8)用户名:bpmis (输入目标用户)              回车

 

9)输入表(T)或分区(T:P)名称。空列表表示用户的所以表

     输入表(T)或分区(T:P)的名称或。如果完成:                           回车

开始执行备份恢复工作。。。

 

 

2.2 分步式指定用户还原-仅导入数据

分布式还原:(仅导入数据)

使用环境是,在执行sql脚本将表结构、表视图等架构提前还原至数据库的情况下!!!

我们可以通过以下步骤,仅仅导入数据即可。(这样操作,避免还原数据库后,表丢失的情况,和空表不能导出,还原的情况。)

imp bpmis/bpmis@pdmis_test log=d:\oraclebf\yd2y\bpmis.log                                     回车

仅导入数据:默认NO>YES        (此处一定选yes,因为结构我们提前已经导入了)      回车
导入文件:EXPDAT.DMP> d:\oraclebf\yd2y\bpmis_20181207.dmp                             回车
输入插入缓冲区大小(最小为8192)30720> 3072000                                                      回车
经由常规路径由 EXPORT:V11.02.00创建的导出文件
已经完成 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集中的导入
只列出导入文件的内容:默认no                               回车

由于对象已存在,忽略创建错误:no                             回车
(在仅导入数据模式下,只能选择no,不能选择ignore=y) 
导入权限:默认yes                                              回车
导入表数据:默认yes                                            回车
导入整个导出文件:默认no                                     回车
用户名:bpmis(输入目标用户)                               回车
输入表(T)或分区(T:P)名称。空列表表示用户的所以表
输入表(T)或分区(T:P)的名称或。如果完成:             回车

等待导入即可。

 

三、使用心得

1imp命令还原数据库表、视图丢失

有表丢失,表空间丢失的情况出现。这个本人尝试过许多方式,都不能根本性的解决出现的问题。

遇到以上问题,我们可以尝试以下方法还原。

1)首先我们需要用一款navicat数据库管理工具去oracle数据服务器端将空表、表结构等做一个备份。

2)exp命令进行服务器目标用户下的数据库备份,将dmp文件带回。

3)然后在目标还原的服务器端新建表空间、临时表空间、用户、授予用户的特权,并指定表空间给新建用户。

4)进入navicat premium 12,连接-oracle-新建连接-测试连接-确定。连接建立后会出现在左侧列表--右键打开找到对应用户pdmis--右键运行SQL文件--找到提前存储文件路径--执行恢复,建议执行2遍。(将在第一步中备份的sql文件《空表、表结构等》恢复至相应的数据库用户下)

 

 

5)再将备份好的dmp文件,通过以下imp指令进行数据还原(ignore=y

imp bpmis/bpmis@pdmis_test fromuser=bpmis touser=bpmis file=d:\oraclebf\yd2y\bpmis_20181207.dmp

log=d:\oraclebf\yd2y\bpmis.log rows=y commit=y buffer=3072000 ignore=y

 

rows=y           导入数据行

fromuser=bpmis   备份数据-源用户

touser=bpmis     导入数据-目标用户

commit=y         commit=y (表示每个数据缓冲满了之后提交一次,而不是导完一张表提交一次,减少对系统回滚段等资源的消耗)

buffer=3072000   imp数据行缓冲区大小>3072000

(commit=y+增大buffer空间 可以加快imp速度,buffer可增至5120000)

ignore=y(如果没有的表,创建并倒入数据,如果已经有的表,忽略创建的,但不忽略倒入表数据。)

6)基本上不会再出现丢表的情况了,然后再进一步的进行数据库表内容的修复工作即可。

发现少了某些表,可以通过表模式,单独导入指定用户下指定的缺少表即可。如 imp ...tables(a,b) ignore=y 

 

2pl/sql编译无效对象

1)选择my objects 下的tables

 

 

2)选中软件中tools工具栏--compile invalid objects(编译无效对象)

 

3)在user下选择ALL users

 

 

4)点击左上角执行绿色箭头--执行编译无效对象,右下角的绿色进度条,完成即为编译完成。