Chinaunix首页 | 论坛 | 博客
  • 博客访问: 970286
  • 博文数量: 358
  • 博客积分: 8185
  • 博客等级: 中将
  • 技术积分: 3751
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 16:27
个人简介

The views and opinions expressed all for my own,only for study and test, not reflect the views of Any Company and its affiliates.

文章分类

全部博文(358)

文章存档

2012年(8)

2011年(18)

2010年(50)

2009年(218)

2008年(64)

我的朋友

分类: Oracle

2009-04-13 10:26:03


获取DDL的几种常用的方法

 

作者:刘颖博 

时间:2004-2-26

mail:liuyingbo@126.com,请指正

 

转载请注明出处及作者

 

大体的分为三种方法:

一;可以通过toad、pl develop等第三方工具进行导出DLL操作,用这种办法的好处在于操作简单方便,但需要安装,下面简单介绍一下用这两个工具获得DLL语句的操作。

 

1.首先是toad工具,可以到网站上下载

操作步骤的简要介绍如下:

a.    启动toad,连接目标数据库

b.    点击DBA->Generate Schema Script,如图1所示:



图1

c.出现图2的操作界面:



图2

通过操作界面(如图2)已经很清楚的,选择相应的Schema,当然可以通过其他的几个tab页面选择相应的条件,点击Execute按钮,ok。详细的操作就不说了!

d.当导出操作结束后,会出现如图3的界面



图3

我们可以将导出的DDL脚本另存(Save to File)或者copy到剪贴板上(Clipboard)。

2.下面说一下另外的一个工具pl develop是如何进行到出DDL语句的

操作步骤如下:

a.    启动pl develop,连接目标数据库

b.    点击Tools->Eort Tables,如图4



图4

c.    然后出现下面界面,如图5



图5

d.    在如图5的界面上,选择相应的内容,然后点击Export按钮,ok,会出现界面如图6,其实这些工具也是调用的E工具而已



图6

如果你没有指定文件目录,文件会出现在pl develop软件的安装目录下。

好,下面介绍第二种方法

二;直接通过E/IMP工具

提供的最原始最实用的导入导出工具,我们大体上可以分为三种办法实现导出DDL。

a.    通过imp指定indexfile参数,但这种办法不爽在于有每行前会有REM

语法大体如下:

e userid=... tables=emp  rows=n file=emp.dmp
imp userid=... file=emp.dmp indexfile=emp.

b.    通过imp指定show=y,同时指定log参数,格式上也不是很爽,在格式上很美观的还是通过工具导出的比较美观

语法大体如下:

e userid=... tables=emp rows=n file= emp.dmp
imp userid=... file= emp.dmp show=y log=emp.

c.    利用unix下有strings命令,语法大体如下,这种方法比较野蛮:

e userid=... tables=tab1 rows=n file=tab1.dmp
strings emp.dmp >emp.
emp.中就有DLL语句了

第三种方法,是利用9i的新特性,就是DBMS_METADATA包,来得到DLL语句,这个也是本文要介绍的重点

三;通过9i的DBMS_METADATA包得到DLL语句

基本上用到的语法如下:

a. 获取单个的建表和建索引的语法

set heading off;
set echo off;
Set pages 999;
set long 90000;
 
spool DEPT.
select dbms_metadata.get_ddl('TABLE','DEPT','SCOTT') from dual; 
select dbms_metadata.get_ddl('INDEX','DEPT_IDX','SCOTT') from dual;
spool off;

 

b.获取一个SCHEMA下的所有建表和建索引的语法,以scott为例:

set pagesize 0

set long 90000

set feedback off

set echo off 
spool scott_schema. 
connect scott/tiger;
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;

 

c.    获取某个SCHEMA的建全部存储过程的语法

connect brucelau /brucelau;

spool procedures.


select
   DBMS_METADATA.GET_DDL('PROCEDURE',u.object_name)

from
   user_objects u

where
   object_type = 'PROCEDURE';


spool off;

 

另:

dbms_metadata.get_ddl('TABLE','TAB1','USER1') 
三个参数中,第一个指定导出DDL定义的对象类型(此例中为表类型),第二个是对象名(此例中即表名),第三个是对象所在的用户名。

 

参考:

ZDNet China《轻松取得结构描述句法》

的官方文档

 
阅读(721) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~