如何查看Oracle数据表的建表语句?

如何查看Oracle数据表的建表语句?

系统环境: 
1、操作系统:Windows 2000 Server,机器内存128M
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:/ORACLE

实现步骤: 
1、用EXP工具导出
2、导入时使用show=y选项、log选项
3、查看、编辑日志文件

具体实例: 

1、调出SQL*Plus

conn system/manager
grant connect,resource to a identified by a;
grant connect,resource to b identified by b;
conn a/a

create 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.txt

Export: 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.txt

Import: 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语句
<think>我们已经在之前的回答中介绍了如何获取单个表语,现在用户询问如何导出YashanDB中所有表语。根据引用[1],YashanDB提供了迁移工具YMP,它可以用于批量导出整个schema的DDL。此外,我们也可以使用SQL脚本的方式批量生成。方法一:使用YMP工具(推荐)YMP迁移平台支持导出整个schema的DDL,包括、索引、约束等。操作步骤如下:1.在YMP中创迁移任务,选择源数据库为YashanDB(因为我们要从YashanDB导出)。2.选择迁移对象为整个schema或指定。3.在迁移设置中选择“仅导出DDL”或类似选项(具体根据YMP界面)。4.执行任务,导出DDL文件。方法二:使用SQL脚本(适用于少量或快速查看)我们可以通过编写PL/SQL脚本或使用SQL查询批量获取所有的DDL。步骤:1.查询当前用户下的所有名(或指定模式下的)。2.循环调用DBMS_METADATA.GET_DDL函数获取每个的DDL。示例脚本(在YashanDB的SQL命令行中执行):```sql--创一个临时来存储所有的DDLCREATETABLEall_ddl(table_nameVARCHAR(100),ddlCLOB);--使用PL/SQL块循环获取DDLBEGINFORtIN(SELECTtable_nameFROMall_tablesWHEREowner='YASHAN')LOOPINSERTINTOall_ddl(table_name,ddl)VALUES(t.table_name,DBMS_METADATA.GET_DDL('TABLE',t.table_name,'YASHAN'));ENDLOOP;END;/--查询结果SELECT*FROMall_ddl;```注意:上述脚本中的'YASHAN'需要替换为实际的用户名(模式名)。方法三:使用SQL*Plus或类似命令行工具(如果支持)可以通过设置SQL*Plus的页面参数,然后执行多个DBMS_METADATA.GET_DDL调用。但YashanDB可能不支持SQL*Plus,所以需要根据实际支持的命令行工具调整。更简单的方法是一次性查询多个的DDL,但注意DBMS_METADATA.GET_DDL一次只能处理一个。因此,我们可以使用如下方式生成多个DDL语句:```sqlSELECTDBMS_METADATA.GET_DDL('TABLE',table_name,'YASHAN')FROMall_tablesWHEREowner='YASHAN';```但是,这个查询会返回多行,每行是一个的DDL。我们可以将结果保存到文件中。在支持SPOOL命令的客户端(如YashanDB自带的命令行工具)中:```sqlSPOOLall_tables_ddl.sqlSELECTDBMS_METADATA.GET_DDL('TABLE',table_name,'YASHAN')FROMall_tablesWHEREowner='YASHAN';SPOOLOFF```注意:如果DDL语句很长,可能需要设置LONG类型参数(类似于Oracle中的SETLONG1000000)来避免截断。在YashanDB中,可以尝试:```sqlSETLONG1000000```总结:对于批量导出,推荐使用YMP工具,因为它可以处理整个schema的所有对象,并且以文件形式输出。如果只是临时需要,可以使用SQL脚本的方式。注意事项:1.权限:执行这些操作需要具有访问数据字典的权限(如SELECT_CATALOG_ROLE)。2.存储空间:如果很多,DDL文本可能会很大,注意存储空间。如果用户需要更详细的YMP操作步骤,可以参考YMP的官方文档[^1]。相关问题:1.如何导出YashanDB中整个schema的所有对象(包括、视图、索引等)的DDL?2.如何使用YMP工具进行数据库迁移?3.在YashanDB中,如何将导出的DDL语句重新导入到另一个数据库中?</think>### 在 YashanDB 中导出所有表语的方法 #### 方法 1:使用 YMP 迁移工具(推荐) 通过崖山迁移平台(YMP)可批量导出整个 schema 的 DDL: 1. **创迁移任务**: - 在 YMP 控制台新迁移任务 - 源数据库选择 YashanDB - 目标数据库选择 "仅生成 DDL" 2. **选择迁移对象**: - 在对象选择界面勾选需要导出的 schema - 选择对象类型为 "" 3. **执行导出**: - 启动迁移任务 - 在输出目录查看生成的 `schema_ddl.sql` 文件 - 文件中包含所有的完整表语 > 优势:自动处理依赖关系(主键/外键/索引),保留完整结构定义[^1]。 #### 方法 2:使用 SQL 脚本批量导出 通过系统视图动态生成所有的 DDL: ```sql -- 设置长文本输出(避免截断) SET LONG 1000000 SET PAGESIZE 0 -- 生成批量导出脚本 SPOOL export_all_tables_ddl.sql SELECT DBMS_METADATA.GET_DDL('TABLE', table_name, owner) || ';' FROM all_tables WHERE owner = 'YASHAN'; -- 替换为实际用户名 SPOOL OFF ``` 执行后会生成 `export_all_tables_ddl.sql` 文件,包含类似内容: ```sql CREATE TABLE "YASHAN"."EMP" (...); CREATE TABLE "YASHAN"."DEPT" (...); ... ``` #### 方法 3:分步查询导出 ```sql -- 步骤1:获取所有名 SELECT table_name FROM all_tables WHERE owner='YASHAN'; -- 步骤2:逐个生成DDL(示例) SELECT DBMS_METADATA.GET_DDL('TABLE', 'EMP', 'YASHAN') FROM DUAL; SELECT DBMS_METADATA.GET_DDL('TABLE', 'DEPT', 'YASHAN') FROM DUAL; ``` #### 注意事项 1. **权限要求**: ```sql GRANT SELECT_CATALOG_ROLE TO current_user; ``` 2. **字符集处理**: - 导出文件议使用 UTF-8 编码 - 检查 `NLS_CHARACTERSET` 参数 3. **存储参数**: - 默认包含空间信息(如 `TABLESPACE "USERS"`) - 可通过 `DBMS_METADATA.SET_TRANSFORM_PARAM` 过滤 > 提示:对大型数据库优先使用 YMP 工具,避免手动操作遗漏依赖对象[^1]。 --- ### 相关问题 1. 如何导出 YashanDB 中的存储过程和函数定义? 2. YMP 工具支持哪些异构数据库迁移到 YashanDB? 3. 如何批量修改 YashanDB 中所有空间? 4. YashanDB 的 DDL 历史记录如何查询? 5. 在 YashanDB 中如何对比两个 schema 的结构差异?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值