Oracle数据库备份(导入导出)

1.数据库的导出;使用pl/sql 工具

 

2.设置参数

 

3.感觉没有多少数据;居然导出了160M文件

4.导出完 后 导入;

 

5.设置导入

 

6.这样会产生的问题:

 1. 如果表里没有数据 就不会备份;就是空表不会备份

 如何查询空表

 方法一:select * from all_all_tables

             where num_rows='0' 

              and owner='ASSP_TEST_0725'

 方法二:select table_name from user_tables where NUM_ROWS=0;

7.产生空表原因

 11G中有个新特性,当表无数据时,不分配segment,以节省空间 
 1、insert一行,再rollback就产生segment了。 

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


 2、设置deferred_segment_creation 参数 
    需注意的是:该值设置后对以前的空表不产生作用,仍不能导出,只能对后面新增   的表产生作用。如需导出之前的空表,只能用第一种方法。
   注意并且要重新启动数据库,让参数生效。


   show parameter deferred_segment_creation  (这句要在命令窗口执行;必须用DBA角色登录) 

   NAME                        TYPE      VALUE 

   ------------------------------------ ----------- ---------- 

   deferred_segment_creation      boolean     TRUE 
     设置成可以导出空表
   SQL> alter system set deferred_segment_creation=false; 

  1. 删除用户所有表

方法一 使用 pl/sql客户端删除;全选然后删除

 

 

 

 

方法二: 执行下面的;然后 拷出来所有数据到一新窗口执行

select 'drop table '||table_name||';' from cat where table_type='TABLE'