oracle 数据库备份、还原、和使用心得(表丢失、视图丢失的解决办法)
一、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)的名称或。如果完成: 回车
等待导入即可。
三、使用心得
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:\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
2、pl/sql编译无效对象
1)选择my objects 下的tables

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

3)在user下选择ALL users

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

oracle 数据库备份、还原、和使用心得(表丢失、视图丢失的解决办法)的更多相关文章
- Oracle数据库备份还原笔记
Oracle数据库备份还原笔记 通过查阅资料知道Oracle备份还原的方式有三种.分别的是导出/导入.热备份和冷备份.导出/导入是一种逻辑备份.而热备份和冷备份是物理备份.[参考资料(https:// ...
- Linux中Oracle数据库备份还原
一.备份Oracle数据库 1.使用数据库管理员账户登录 sqlplus system/system@orcl as sysdba; 2.创建备份目录,并指定备份目录(bak_dir)的物理路径 cr ...
- oracle数据库备份还原命令
oracle数据库备份命令exp 用户名/密码@orcl file=d:\xxxxxx.dmp owner=用户名 oracle数据库还原命令sqlplus conn / as sysdba drop ...
- Oracle 数据库备份还原(Expdp/impdp)记录
最近公司将原数据库服务器切换.之前没整过这块,也是一堆的度娘.经过不停的摸索,终于成功了.现在将这份艰辛记录下来,方便自己以后查阅的同时,方便有类似需求的同学参考. 我们此次切换共分:ERP.LOS. ...
- 关于oracle数据库备份还原-impdp,expdp
初始化: -- 创建表空间 CREATE TABLESPACE 表空间名 DATAFILE '文件名.dat' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE UNL ...
- Oracle数据库备份还原工具之Expdp/IMPdp
使用EXPDP和IMPDP时应该注意的事项: EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用. EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用, ...
- Oracle数据库备份还原
导出备份的命令: 开始->运行->cmd->exp username/password@tns_name file=d:\backup.dmp 导入备份的命令: 开始->运行- ...
- 【Oracle】想查询相关的v$视图,但是提示表或视图不存在解决办法
原因是使用的用户没有相关的查询权限导致 解决办法: grant select any dictionary to 用户; --这个权限比较大 这个权限是最低的要求,但是可以访问到v$相关视图 ...
- oracle数据库备份、还原命令及常见问题(待补充)
1.oracle数据库的备份:先查空表——将结果全选复制为insert语句——将语句执行后导出 先select 'alter table '||table_name||' allocate exten ...
随机推荐
- linux 播放加密DVDs
尝试下 https://www.cyberciti.biz/faq/howto-ubuntu-linux-playback-dvd/
- unity中实现三个Logo图片进行3秒钟的若隐若现后互相切换Logo图片
private List<Sprite> storeTexture; public void Start() { storeTexture = new List<Sprite> ...
- xml的方式配置AOP:Aspect Oriented Programming
在某些类中, 什么时机, 做什么事情 切入点(point-cut): 在某些类中(Class<?>[] itfc = new Class<?>[] { IStudentServ ...
- day24-python操作数据库四
#!/usr/bin/env python # -*- coding:utf-8 -*- # @time: 2017/11/23 23:10 # Author: caicai # @File: dem ...
- VSTO - 使用Excel加载项生成表和图表
此示例显示如何创建Excel的加载项,使用户可以在其工作表中选择库存符号,然后生成一个新工作表,显示库存的历史性能. 工作表包含数据表和图表. 介绍Excel加载项通常不知道工作表包含什么.典型的加载 ...
- 无法卸载Sql Server 的解决办法
提示如下: 解决办法: 命令提示符——>wmic——>product list 找到与Sql Server 有关的程序: 重新打开一个命令提示符: 执行卸载命令:msiexec /x {7 ...
- openstack网络DVR
一.DVR描述 分布式路由 二.相关的专业术语 术语名称 术语解释 SNAT 在路由器后(POSTROUTING)将内网的ip地址修改为外网网卡的ip地址,也就是绑定浮动IP和外部通信 DNAT 在路 ...
- Spring学习三
Spring注解来注入bean 在classpath中扫描组件 组件扫描,即componetscanning 利用注解来扫描的组件有 @Component :基本注解,表示一个受Spring管理的 ...
- nginx保持会话的方式
1)ip_hash 简单易用,但是有如下缺点 后端服务器宕机后,session会丢失 来自同一局域网的客户端会被转发到同一个后端服务器,可能导致负载失衡 不适用CDN网络,不适用于前段还有代理的情况 ...
- python scrapy 把cookie并转化为字典的形式
在用scrapy设置cookie的时候,需要从网页上对应的页面把cookie字段复制下来,并转化为字典的形式,下面代码是对cookie的转化过程 # -*- coding: utf-8 -*- cla ...