一、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:pmis_20181211.log 回车
exp 用户名/密码@对应的实例(tns名) log=指定路径
2)输入数组提取缓冲区大小:4096 >65536 加大缓冲区提高备份速度回车
3)导出文件:EXPDAT.DMP > D:orcl_backuppmis_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:pmis_20181211.log 回车 (等待导出log文件)
exp bpmis/bpmis@bpmis 回车
输入数组提取缓冲区大小:4096 > 65536 回车
导出文件:EXPDAT.DMP > D:orcl_backuppmis_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:oraclebfyd2ypmis_20181207.dmp
log=d:oraclebfyd2ypmis.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:oraclebfpdmispdmis_20181212pdmis_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:oraclebfyd2ypmis.log 回车
imp 用户名/密码@对应的实例(tns名) log=指定路径
2)仅导入数据:默认NO 回车
3) 导入文件:EXPDAT.DMP> d:oraclebfyd2ypmis_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:oraclebfyd2ypmis.log 回车
仅导入数据:默认NO>YES (此处一定选yes,因为结构我们提前已经导入了) 回车
导入文件:EXPDAT.DMP> d:oraclebfyd2ypmis_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)的名称或。如果完成: 回车
等待导入即可。
三、使用心得
1、imp命令还原数据库表、视图丢失
有表丢失,表空间丢失的情况出现。这个本人尝试过许多方式,都不能根本性的解决出现的问题。
遇到以上问题,我们可以尝试以下方法还原。
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:oraclebfyd2ypmis_20181207.dmp
log=d:oraclebfyd2ypmis.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
2、pl/sql编译无效对象
1)选择my objects 下的tables
2)选中软件中tools工具栏--compile invalid objects(编译无效对象)
3)在user下选择ALL users
4)点击左上角执行绿色箭头--执行编译无效对象,右下角的绿色进度条,完成即为编译完成。