在DBMS_METADATA之前, 要获得建表语法, 估计很多人都要用Toad或PL/SQL Developer之类的程序了, 不过很多数据库运行在Unix或Linux上, 并不允许我们用这类工具去连接, 这时还真是一件难事. 就算有了DBMS_METADATA我也并不觉得它很方便, 因此不如自已写一个角本, 在我的DBDiff程序中, 已经通过exp/imp的办法实现了, 将相关部分功能独立出来, 就成了getddl工具(Windows版本).
程序经以过以下步骤来实现这个功能: 1, rows=n进行导出; 2, 用show=y加上indexfile选项生成内容; 3, 处理生成的indexfile并打印出DDL语句. 因此这个小工具需要Oracle的客户端, 并且客户端的版本不能高于服务器端.
Usage: getddl table=... [user=...]
(c) Copyright Lou Fangxin, 2008, all rights reserved.
user就是exp或imp时的用户名, table就是exp的tables参数, user参数不指定就以sys用户连接. 下面来看一个例子.
C:\>getddl table=sh2.t_iottest
CREATE TABLE "T_IOTTEST" ("COL1" NUMBER NOT NULL ENABLE,
PRIMARY KEY ("COL1") ENABLE)
ORGANIZATION INDEX PCTFREE 10
STORAGE ( FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) PCTTHRESHOLD 50 ;
在生成的DDL角本中, 没有表对应的Trigger, 如果是Context有关的, 也有可能不准确, 另外表的授权语句不能生成. 用这个工具导出的DDL语句中没有Tablespace子句, 也没有Initial和Next子句. 欢迎大家使用!
留言 (7)
又出新招啊,支持:)
Posted by eygle | Dec 24, 2007 3:58 PM
好东西,收藏了,谢谢
Posted by niubro | Dec 24, 2007 4:01 PM
这个功能,我是写了个package完成的。
Posted by thomas zhang | Dec 24, 2007 5:50 PM
你的这个package,支持分区表, 复合分区表?
Posted by anysql | Dec 24, 2007 6:43 PM
支持啊,为了写这个东西,把相关的view研究了个遍,搞得老复杂,没什么技术含量^|^
Posted by thomas zhang | Dec 25, 2007 5:33 PM
我以前用Java写过, 嫌烦没有写全. 不过感觉没有exp/imp这样的方法保险.
Posted by anysql | Dec 25, 2007 6:32 PM
我放在了自己常用的一个package里,包括create table, comment, index, trigger, object grant.不知道还缺啥?
http://hi.baidu.com/edeed/blog/item/97378bd4e0129705a18bb733.html
Posted by edeed | Dec 26, 2007 12:22 PM