当前位置:首页 > Oracle
Oracle 11g 导出/导入空表的方法
来源:靑龍一笑的博客  作者:靑龍一笑  发布时间:2014-08-24 13:34:54  点击量:1713  评论:0

    一般情况下,Oracle 数据库使用 exp 和 imp 命令来导出和导入数据。

exp system/manager owner=BLOG file=blog.dmp
imp system/manager fromuser=BLOG touser=BLOG file=D:\blog.dmp ignore=y

    但是,在 Oracle 数据库中,当表无数据时,默认是不分配 segment,以节省空间。因此,exp 不能导出空表。
    如果在 Oracle 安装时,就设置了 deferred_segment_creation 参数,即:

alter system set deferred_segment_creation=false;

    那么无论是空表还是非空表,都会分配 segment,这样就可以导出空表。
    如果在导出之前没有设置这个参数,那么,可以在空表中插入数据,再删除,则会产生 segment,这样也可以导出空表。
    对于空表比较多的情况,事先又没有设置 deferred_segment_creation 参数,那么有两种方法:
    方法一、使用 expdp 导出、impdp 导入
    1、创建导出目录

[root@RicenOS ~]$ mkdir expdir
[root@RicenOS ~]$ sqlplus "/as sysdba"
SQL> create or replace directory expdir as '/home/oracle/expdir';
SQL> grant read, write on directory expdir to public;

    2、使用 expdp 导出数据

[root@RicenOS ~]$ expdp system/manager schemas=BLOG dumpfile=blog.dmp directory=expdir

    3、创建导入目录

D:\>md impdir
D:\>sqlplus "/as sysdba"
SQL> create directory impdir as 'D:\impdir';
SQL> grant read, write on directory impdir to public;

    4、将导出的数据放到导入目录里
    5、使用 impdp 导入数据

impdp system/manager dumpfile=blog.dmp directory=impdir remap_schema=BLOG:BLOG

    方法二、写一个存储过程,将空表找出来并执行分配空间,代码如下:

DECLARE
  v_table tabs.table_name%TYPE;
  v_sql   VARCHAR2(888);
  v_q     NUMBER;
  v_alter VARCHAR2(1000);
  CURSOR c1 IS
    SELECT table_name tn FROM tabs;
  TYPE c IS REF CURSOR;
  c2 c;
BEGIN
  DBMS_OUTPUT.PUT_LINE('以下为空数据表的表名:');
  FOR r1 IN c1 LOOP
    v_table := r1.tn;
    v_sql   := 'SELECT COUNT(*) q FROM ' || v_table;
    OPEN c2 FOR v_sql;
    LOOP
    FETCH c2
      INTO v_q;
    EXIT WHEN c2%NOTFOUND;
    IF v_q = 0 THEN
      DBMS_OUTPUT.PUT_LINE(v_table);
      v_alter := 'alter table ' || v_table ||  ' allocate extent'; 
      DBMS_OUTPUT.PUT_LINE(v_alter);
      EXECUTE IMMEDIATE v_alter;
    END IF;
    END LOOP;
    CLOSE c2;
  END LOOP;
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('Error occurred');
END;
/

    此时,使用 exp、imp 命令就可以导出和导入空表了。

版权所有 © 2005-2023 靑龍一笑的博客  Powered by C.S.Ricen
Copyright © 2005-2023 by www.ricensoftwares.com.cn  All Rights Reserved.

欢迎光临本站,这里是靑龍一笑的博客。

因资金匮乏,本站已迁到国外的免费空间,可能导致本站的访问速度较慢,由此给您带来的不便,敬请谅解。

您可以通过下方的“支持本站建设”链接,给本站提供资金支持。

Free Web Hosting