一、备份
1、说明:
oracle 12c导出dmp备份文件为完整备份,支持12c数据库导入,不支持12c以下版本导入。oracle 11g导出dmp文件,会出现空表无法导出,导出的dmp文件不完整。按下面解决方法可完整备份出dmp文件。
2、步骤:(cmd界面直接操作,需配置好Oracle环境变量)
Oracle导出dmp文件:
导出操作见截图。
Oracle导入dmp文件
imp username/password@Orcl file=d:\test.dmp full=y;
如:C:\Users\Administrator>imp jgt/123@orcl file=d:\data.dmp full=y;
Oracle 11g不能导出空表解决:
使用ALLOCATE EXTENT,可以导出之前已经存在的空表。
使用ALLOCATE EXTENT可以为数据库对象的每一张表分配Extent(注意针对每一张表,就是说一张表需要一条SQL代码)
批量输出上述生成的SQL语句并写入到一个.sql的脚本文件中。
如:
1. 创建执行脚本文件:我创建一个E:\sql_script.sql文件。内容如下:
set heading off;
set echo off;
set feedback off;
set termout on;
spool E:\sql_allocate.sql;
Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null;
spool off;
这个脚本的作用就是创建一个E:\sql_allocate.sql脚本文件,将Select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0 or num_rows is null的执行结果(就是给每张表生成segment的SQL代码)批量输出,存储到一个E:\sql_allocate.sql的脚本文件中。
2. 执行E:\sql_script.sql文件来生成“分配表空间的SQL代码”的脚本文件sql_allocate.sql。
命令如下:
SQL>@ E:\sql_script.sql; (也可写一个批处理文件,命令如下:sqlplus 用户名/密码@数据库 @E:\sql_script.sql)
执行完毕后,得到E:\sql_allocate.sql脚本文件(里面是给所有空表分配segment的SQL代码)。
打开该文件会看到,已经得到对所有空表分配空间的SQL语句。
3. 执行E:\sql_allocate.sql文件来对表分配空间。
命令如下:SQL>@ E:\sql_allocate.sql
执行完毕,表已更改。之前存在的空表已分配segment空间!
4. 此时执行exp命令,即可把包括空表在内的所有表,正常导出。
(注:http://blog.sina.com.cn/s/blog_5f0e9ca50101it7n.html)
二、oracle自动备份
@echo off
echo 正在备份数据库,请稍等......
exp c##sqtcw/"nc2015IT0318"@orcl file=e:/backup/oracle/nctcw%date:~0,4%%date:~5,2%%date:~8,2%.dmp file=true
echo 任务完成!
1.新建bat批处理文件,内容如上语法: exp 用户名/密码@实例 file="备份路径" file=true 文件名是格式为:***+日期
2.运用window自带的计划任务。新建规则,时间设置成每天一次。触发器 添加上面新建的bat文件