Oracle 备份与还原

oracle 备份与还原

1、备份数据库(exp)

一、彻底备份sql

exp demo/demo@orcl buffer=1024 file=d:\back.dmp full=y

demo:用户名、密码 数据库

buffer: 缓存大小缓存

file: 具体的备份文件地址 服务器

full: 是否导出所有文件 oracle

ignore: 忽略错误,若是表已经存在,则也是覆盖 spa

二、将数据库中system用户与sys用户的表导出 日志

exp demo/demo@orcl file=d:\backup\1.dmp owner=(system,sys)

 三、导出指定的表 code

exp demo/demo@orcl file=d:\backup2.dmp tables=(teachers,students)

 四、按过滤条件,导出 blog

exp demo/demo@orcl file=d:\back.dmp tables=(table1) query=\" where filed1 like 'fg%'\"

 导出时能够进行压缩: cmd

命令后面 加上 compress=y   

若是须要日志,后面: log=d:\log.txt

 

五、备份远程服务器的数据库

exp 用户名/密码@远程的IP:端口/实例 file=存放的位置:\文件名称.dmp full=y

 

2、还原数据库

打开cmd直接执行以下命令,不用再登录sqlplus。

一、完整还原

imp demo/demo@orcl file=d:\back.dmp full=y ignore=y log=D:\implog.txt

指定log很重要,便于分析错误进行补救。

二、导入指定表:

imp demo/demo@orcl file=d:\backup2.dmp tables=(teachers,students)

三、还原到远程服务器

imp 用户名/密码@远程的IP:端口/实例 file=存放的位置\文件名称.dmp full=y 

 

3、解决11G后,空表没法导出的问题

11G中有个新特性,当表无数据时,不分配segment,以节省空间。这样在导出数据的时候,空表不被导出

解决方法:

一、insert一行,再rollback就产生segment了。

  该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。

二、设置deferred_segment_creation 参数

该参数值默认是TRUE,当改成FALSE时,不管是空表仍是非空表,都分配segment。

需注意的是:该值设置后对之前导入的空表不产生做用,仍不能导出,只能对后面新增的表产生做用。如需导出以前的空表,只能用第一种方法。

须要查询全部的空表,而后执行

select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0

而后再导出便可。

 

4、导入数据时遇到 ORACLE 错误 959,表空间 'xxx' 不存在

IMP-00003: 遇到 ORACLE 错误 959
ORA-00959: 表空间 'xxx' 不存在 IMP-00017: 因为 ORACLE 错误 959, 如下语句失败:

解决方案:

一、导入前,先建立表空间

(建立目录即为oracle的数据目录)

create tablespace xxx datafile 'D:\oracle\data\xxx.dbf' size 100M autoextend on;

二、指定用户该表空间不受限

alter user demo quota unlimited on xxx;//后面的xxx是表空间名

三、而后再imp便可

注意导入时必定要指定log,便于分析解决

成功提示是这样的:

成功终止导入,没有出现警告
相关文章
相关标签/搜索