有些时候,帮助客户分析SQL的时候可能需要知道表结构,这就需要在收集信息阶段收集表结构等信息。
两种方法。
方法一:使用DBMS_METADATA.GET_DDL包
FUNCTION GET_DDL RETURNS CLOB 参数名称 类型 输入/输出默认值? ------------------------------ ----------------------- ------ -------- OBJECT_TYPE VARCHAR2 IN NAME VARCHAR2 IN SCHEMA VARCHAR2 IN DEFAULT VERSION VARCHAR2 IN DEFAULT MODEL VARCHAR2 IN DEFAULT TRANSFORM VARCHAR2 IN DEFAULT
若要收集某一用户的某一张表的结构信息,可使用以下SQL
SQL> set pages 10000 SQL> set lines 120 SQL> set long 10000 SQL> SELECT DBMS_METADATA.GET_DDL('TABLE','TEST','MARSHALL') FROM DUAL; DBMS_METADATA.GET_DDL('TABLE','TEST','MARSHALL') -------------------------------------------------------------------------------- CREATE TABLE "MARSHALL"."TEST" ( "ID" NUMBER ) SEGMENT CREATION DEFERRED PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING TABLESPACE "MARSHALL"
若要收集当前用户全部表的信息,可使用如下SQL(需要以此用户身份登陆)
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) FROM USER_TABLES u;
上面的SQL,需要以对应用户身份登陆,不是很方便,可以SYS用户身份登陆,使用如下SQL收集:
SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name,'MARSHALL') FROM dba_TABLES u where owner='MARSHALL';
方法二:使用EXP/IMP
导出marshall用户的全部表结构信息,导入imp用户
exp marshall/marshall file=struct.dmp owner=(marshall) rows=n imp imp/imp file=struct.dmp fromuser=marshall
也可导出几个用户的表结构(marshall 有dba权限)
exp marshall/marshall file=struct.dmp owner=(marshall,imp) rows=n
导出某用户的个别表
不能同时设置owner及tables参数,但是可以在tables中指定owner
F:\awrtmp>exp "'/ as sysdba'" file=1.dmp owner=(MARSHALL) tables=AAA rows=n Export: Release 11.2.0.1.0 - Production on 星期二 8月 16 16:54:51 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options EXP-00026: 指定了冲突模式 EXP-00000: 导出终止失败 F:\awrtmp>exp "'/ as sysdba'" file=1.dmp tables=MARSHALL.AAA rows=n Export: Release 11.2.0.1.0 - Production on 星期二 8月 16 16:55:34 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集 注: 将不导出表数据 (行) 即将导出指定的表通过常规路径... 当前的用户已更改为 MARSHALL . . 正在导出表 AAA