一、Oracle数据库的导入与导出
当我们使用一个数据库时,总希望数据库的内容是可靠的、正确的,但由于计算机系统的故障(硬件故障、软件故障、网络故障、进程故障和系统故障)影响数据库系统的操作,影响数据库中数据的正确性,甚至破坏数据库,使数据库中全部或部分数据丢失。因此当发生上述故障后,希望能重构这个完整的数据库。该处理称为数据库恢复,而要进行数据库的恢复必须要有数据库的备份工作。
数据库的导出(exp):
exp scott/tiger@orcl file=d:\back_orcl.dmp full=y
exp system/******@orcl file=d:\back_orcl_by_owner.dmp owner=(system,sys)
exp scott/tiger@orcl file=d:\back_orcl_tables.dmp tables=(table1,table2)
exp scott/tiger@orcl
file=d:\back_orcl_table1_telephone.dmp
tables=table1
query=\"where telephone like '158%' \"
数据库的导入(imp):
imp scott/tiger@orcl file=d:\back_orcl.dmp full=y
imp system/******@orcl file=d:\back_orcl_by_owner.dmp fromuser=(system,sys)
imp scott/tiger@orcl file=d:\back_orcl_tables.dmp tables=(table1,table2)
注意:
1、如果导出时未指定file,那么在执行命令后会在当前目录下生成一个叫EXPDAT.DMP文件,此文件为备份文件。
2、exp imp导出导入数据方式的好处是只要你本地安装了Oracle客户端,你就可以将服务器中的数据导出到你本地计算机。同样也可以将dmp文件从你本地导入到服务器数据库中。但是这种方式在Oracle11g版本中会出现一个问题:不能导出空表。Oracle11g新增了一个参数deferred_segment_creation,含义是段延迟创建,默认是true。当你新建了一张表,并且没用向其中插入数据时,这个表不会立即分配segment。
解决办法:
1、设置deferred_segment_creation参数为false后,无论是空表,还是非空表,都分配segment。在sqlplus中,执行如下命令:
SQL>alter system set deferred_segment_creation=false;
查看:
SQL>show parameter deferred_segment_creation;
该值设置后,只对后面新增的表起作用,对之前建立的空表不起作用,并且注意要重启数据库让参数生效。
2、使用 ALLOCATE EXTEN
使用 ALLOCATE EXTEN可以为数据库对象分配Extent,语法如下:
alter table table_name allocate extent
构建对空表分配空间的SQL命令:
SQL>select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
批量生成要修改的语句。
然后执行这些修改语句,对所有空表分配空间。
此时用exp命令,可将包括空表在内的所有表导出。
① Dmp格式:.dmp是二进制文件,可跨平台,还能包含权限,效率好,
② Sql格式:.sql格式的文件,可用文本编辑器查看,通用性比较好,效率不如第一种,适合小数据量导入导出。尤其注意的是表中不能有大字段 (blob,clob,long),如果有,会报错
③ Pde格式:.pde格式的文件,.pde为PL/SQL Developer自有的文件格式,只能用PL/SQL Developer工具导入导出,不能用文本编辑器查看。
备注:虽然dmp格式为最优选,但是不容易实现,原因有俩点:首先此格式需要安装oracle完整版,因为导出时需要选择对应exp.exe与imp.exe,而且导出是安装的版本要与要导出数据的数据库版本一致,同理导入时也要对应,否则会出现版本不一致的问题(查阅资料中介绍的,个人没有证实);其次此格式的导出经常会遇到导出过程一闪而过,但是导出不成功的情况,原因未知(可以查阅环境变量配置ORACLE_HOME配置正确,个人尝试多次,仍有问题,最后无奈选取导出为pde格式)。
①导出建表语句(包括存储结构)
导出步骤tools ->export user object,选择要导出的对象,导出.sql文件,如下图:
等待导出完成
②导出数据文件
导出步骤tools ->export tables,选择要导出的表及导出的格式进行导出。
导出为dmp格式,如下图:
导出为sql格式,如下图:
导出为pde格式,如下图:
备注:采用第三方工具导出导入整个数据库的话,耗时较长,一定要有足够的时间来操作(数据量大的话需要好几个小时)
3、导入方法
登录plsql工具,使用之前准备工作所创建的用户。
步骤类似导出方法
①导入建表语句
导入步骤tools->import tables->SQL Inserts 导入.sql文件
②导入数据
tools->import talbes,然后再根据导出的数据格式选择导入dmp文件,或者sql文件,或者pde文件。
备注:导入之前最好把以前的表删除,当然导入另外数据库除外。
另外导入时当发现进度条一直卡在一个点,而且导出的文件不再增大时,甚至是提示程序未响应,千万不要以为程序卡死了,这个导入导出就是比较缓慢,只要没有提示报错,或者导入完成就不要停止程序。