首页 »数据库 » oracleddl:Oracle 9i轻松取得建表和索引DDL语句 »正文
oracleddl:Oracle 9i轻松取得建表和索引DDL语句
来源: 发布时间:星期六, 2009年3月14日 浏览:0次 评论:0
="t18">
我们都知道在9i的前 ![](/icons/56001dou.gif) 要想获得建表和索引 ![](/icons/56001de.gif) 语句是 ![](/icons/56001yi.gif) 件很麻烦 ![](/icons/56001de.gif) 事 ![](/icons/56001dou2.gif) 我们通常 ![](/icons/56001de.gif) 做法都是通过eXPort with rows=no来得到 ![](/icons/56001dou.gif) 但它 ![](/icons/56001de.gif) 输出 ![](/icons/56001yinwei.gif) 格式 ![](/icons/56001de.gif) 问题并不能直接拿来用 ![](/icons/56001dou2.gif) 而另 ![](/icons/56001yi.gif) 种思路方法就是写复杂 ![](/icons/56001de.gif) 脚本来查询数据字典 ![](/icons/56001dou.gif) 但这对于 ![](/icons/56001yi.gif) 稍微复杂 ![](/icons/56001de.gif) 对象 ![](/icons/56001dou.gif) 如IOT和嵌套表等 ![](/icons/56001dou.gif) 还是无法查到 ![](/icons/56001dou2.gif)
从数据字典中获得DDL语句是经常要用 ![](/icons/56001de.gif) ![](/icons/56001dou.gif) 非凡是在系统升级/重建 ![](/icons/56001de.gif) 时候 ![](/icons/56001dou2.gif) 在Oracle 9i中 ![](/icons/56001dou.gif) 我们可以直接通过执行dbms_metadata从数据字典中查处DDL语句 ![](/icons/56001dou2.gif) 使用这个功能强大 ![](/icons/56001de.gif) 工具 ![](/icons/56001dou.gif) 我们可以获得单个对象或整个SCHEMA ![](/icons/56001de.gif) DDL语句 ![](/icons/56001dou2.gif) 最好不过 ![](/icons/56001de.gif) 是 ![](/icons/56001yinwei.gif) 它使用起来很简单 ![](/icons/56001dou2.gif)
1、获得单个表和索引DDL语句 ![](/icons/56001de.gif) 思路方法:
heading off;
echo off;
Set pages 999;
long 90000;
spool get_single.sql
select dbms_metadata.get_ddl("TABLE","SZT_PQSO2","SHQSYS") from dual;
select dbms_metadata.get_ddl("INDEX","INDXX_PQZJYW","SHQSYS") from dual;
spool off;
下面是输出 ![](/icons/56001dou2.gif) 我们只要把建表/索引语句取出来在后面加个分号就可以直接运行了
SQL> select dbms_metadata.get_ddl("TABLE","SZT_PQSO2","SHQSYS") from dual;
CREATE TABLE "SHQSYS"."SZT_PQSO2"
( "PQBH" VARCHAR2(32) NOT NULL ENABLE,
"ZJYW" NUMBER(10,0),
"CGSO" NUMBER(10,0) NOT NULL ENABLE,
"SOLS" VARCHAR2(17),
"SORQ" VARCHAR2(8),
"SOWR" VARCHAR2(8),
"SOCL" VARCHAR2(6),
"YWHM" VARCHAR2(10),
"YWLX" VARCHAR2(6)
)
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 1048576 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "DATA1"
SQL> select dbms_metadata.get_ddl("INDEX","INDXX_PQZJYW","SHQSYS") from dual;
CREATE INDEX "SHQSYS"."INDXX_PQZJYW" _disibledevent=>
pagesize 0
long 90000
feedback off
echo off
spool get_schema.sql
connect shqsys/shqsys@hawk1;
SELECT DBMS_METADATA.GET_DDL("TABLE",u.table_name)
FROM USER_TABLES u;
SELECT DBMS_METADATA.GET_DDL("INDEX",u.index_name)
FROM USER_INDEXES u;
spool off;
需要注重 ![](/icons/56001de.gif) 是 ![](/icons/56001dou.gif) 当我们 ![](/icons/56001de.gif) 表中有外健(参照约束)时 ![](/icons/56001dou.gif) 我们需要判别参照表的间 ![](/icons/56001de.gif) 顺序 ![](/icons/56001dou.gif) 确保重建时按照合理 ![](/icons/56001de.gif) 顺序进行 ![](/icons/56001dou2.gif) 你可以通过查询dba_constra ![](/icons/56001int.gif) s and dba_cons_columns来确定各表的间 ![](/icons/56001de.gif) 顺序 ![](/icons/56001dou.gif) 不再详述
相关文章
读者评论
发表评论
|
|