现在Oracle 8.17的一个数据库下的某个用户中有一系列的对象,当然包括
表、视图、存储过程....., 现在我想把该用户下这一系列对象的DDL语句生成一个
.sql文件后在另一台装有Oracle的机器上运行,以生成相同的对象。
    现在的问题是在Oracle下不知有什么工具可生成一个用户下所有对象的DDL语句,
并将它们放在一个.sql文件中?
    急,急,急!

解决方案 »

  1.   

    记忆上可以用spool,忘记怎样操作.
      

  2.   

    使用pl-sql develpoer
    www.51delphi.com注册后可以下载
      

  3.   

    既然有这一系列对象的DDL语句,那就建立一个sql语句,里面为运行这些不同的建立表、视图、序列的语句。然后再建立一个后缀bat的文件,运行这个sql语句不就ok了。
    如:
    @SQL\insert_c_cfjg.sql            
    @SQL\insert_c_cllx.sql             
    @SQL\insert_c_hphm.sql
      

  4.   

    exp username/password@tnsname file=data.dmp owner=对象的拥有者
    上面的语句将源库中的该用户的所有对象导出在新的数据库中先创建该用户,然后用下面的语句导入即可
    imp username/password@tnsname file=data.dmp所有的对象就创建好了
      

  5.   

    使用pl/sql developerTOOLS菜单里的EXPORT USER OBJECTS选项,操作方便并且非常经济实用!
      

  6.   

    最好使用exp,imp 在导入时加上rows=n
      

  7.   

    或者,泥这样吧:
    1、exp username/password@tnsname file=a.dmp log=loga.txt
    2、imp username/password@tnsname file=a.dmp show=y log=logb.txt
    打开logb.txt,就可以看到DDL语句OK?
      

  8.   

    建议用这个工具SQL Navigator 3
    需要的话来信[email protected]
      

  9.   

    如果只想导出结构不导数据的话,powerdesigner是个很好的选择。他不只可以导出表结构,最新9版本能导出包括表间关系、触发器、存储过程、包等。
      

  10.   

    实现步骤: 
    1、用EXP工具导出
    2、导入时使用show=y选项、log选项
    3、查看、编辑日志文件具体实例: 1、调出SQL*Plusconn system/manager
    grant connect,resource to a identified by a;
    grant connect,resource to b identified by b;
    conn a/acreate table a(a number);
    insert into a values(1);
    insert into a values(2);
    insert into a values(3);create table b(a number,b varchar2(10));
    insert into b values(1,'1111');
    insert into b values(2,'2222');
    insert into b values(3,'3333');
    commit;
    2、打开一个DOS窗口、先执行导出E:\>exp a/a file=a.dmp log=loga.txtExport: Release 8.1.6.0.0 - Production on 星期五 12月 1 22:24:16 2000(c) Copyright 1999 Oracle Corporation. All rights reserved.
    连接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
    With the Partitioning option
    JServer Release 8.1.6.0.0 - Production
    已导出ZHS16GBK字符集和ZHS16GBK NCHAR 字符集
    . 正在导出 pre-schema 过程对象和操作
    . 正在导出用户A的外部函数程序库名称
    . 正在导出用户A的对象类型定义
    即将导出A的对象 ...
    . 正在导出数据库链接
    . 正在导出序号
    . 正在导出群集定义
    . 即将导出A的表通过常规路径 ...
    . . 正在导出表 A 3 行被导出
    . . 正在导出表 B 3 行被导出
    . 正在导出同义词
    . 正在导出视图
    . 正在导出存储的过程
    . 正在导出运算符
    . 正在导出引用完整性约束条件
    . 正在导出触发器
    . 正在导出索引类型
    . 正在导出位图、功能性索引和可扩展索引
    . 正在导出后期表活动
    . 正在导出快照
    . 正在导出快照日志
    . 正在导出作业队列
    . 正在导出刷新组和子组
    . 正在导出维
    . 正在导出 post-schema 过程对象和操作
    . 正在导出统计
    在没有警告的情况下成功终止导出。E:\>3、再执行导入,使用show=y、log这两个选项E:\>imp a/a file=a.dmp show=y log=logb.txtImport: Release 8.1.6.0.0 - Production on 星期五 12月 1 22:29:49 2000(c) Copyright 1999 Oracle Corporation. All rights reserved.
    连接到: Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
    With the Partitioning option
    JServer Release 8.1.6.0.0 - Production经由常规路径导出由EXPORT:V08.01.06创建的文件
    已经完成ZHS16GBK字符集和ZHS16GBK NCHAR 字符集中的导入
    . 正在将A的对象导入到 A
    "CREATE TABLE "A" ("A" NUMBER) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 25"
    "5 LOGGING STORAGE(INITIAL 131072 NEXT 65536 MINEXTENTS 1 MAXEXTENTS 2147483"
    "645 PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLE"
    "SPACE "SYSTEM""
    . . 正在跳过表 "A""CREATE TABLE "B" ("A" NUMBER, "B" VARCHAR2(10)) PCTFREE 10 PCTUSED 40 INIT"
    "RANS 1 MAXTRANS 255 LOGGING STORAGE(INITIAL 131072 NEXT 65536 MINEXTENTS 1 "
    "MAXEXTENTS 2147483645 PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_P"
    "OOL DEFAULT) TABLESPACE "SYSTEM""
    . . 正在跳过表 "B"成功终止导入,但出现警告。E:\>4、使用编辑器打开logb.txt,里面可以看到DDL语句
      

  11.   

    取存储过程代码的存储过程:先修改或添加init.ora的UTL_FILE_DIR参数
    例如:
    utl_file_dir=G:\oracle\temp    //保存文本的路径为G:\oracle\temp
    此过程将所有的过程代码保存到G:\oracle\temp\PRO_ALL.txt中
    create or replace procedure PRO_ALL_TO_TXT
    is
       file_handle  utl_file.file_type;
       STOR_TEXT  VARCHAR2(4000);
       F_NAME VARCHAR2(30);
    N NUMBER;
    I NUMBER;
    CURSOR C_NAME IS
    SELECT DISTINCT NAME FROM ALL_SOURCE WHERE TYPE='PROCEDURE';
    begin
    OPEN C_NAME;
    LOOP
    FETCH C_NAME INTO F_NAME;
    EXIT WHEN C_NAME%NOTFOUND; 
    I:=1;
        SELECT MAX(LINE) INTO N FROM ALL_SOURCE WHERE NAME=F_NAME AND  TYPE='PROCEDURE';
    file_handle:=utl_file.fopen('G:\oracle\temp','PRO_ALL.txt','a');
    utl_file.put_line(file_handle,'PROCEDURE NAME:'||F_NAME);
        WHILE I<=N LOOP
        SELECT TEXT  INTO STOR_TEXT FROM ALL_SOURCE WHERE NAME=F_NAME AND  TYPE='PROCEDURE' AND LINE= I;
        I:=I+1;
        utl_file.put_line(file_handle,stor_text);
        END LOOP;
        utl_file.put_line(file_handle,'**********************************************');
        utl_file.fclose(file_handle);
        COMMIT;
    END LOOP;  
    end PRO_ALL_TO_TXT;
    /