ITPUB论坛-中国专业的IT技术社区

 找回密码
 注册
查看: 345|回复: 2

用dbms_metadata.get_ddl导出分区表结构

[复制链接]
论坛徽章:
9
2013年新春福章
日期:2013-02-25 14:51:24灰彻蛋
日期:2013-02-28 17:57:18蜘蛛蛋
日期:2013-03-06 17:16:15茶鸡蛋
日期:2013-03-26 17:32:46雪佛兰
日期:2013-11-26 10:47:53优秀写手
日期:2014-01-22 06:00:12马上有车
日期:2014-04-16 17:19:19慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
跳转到指定楼层
1#
发表于 2018-7-5 11:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lhqmccn 于 2018-7-5 11:28 编辑

我想获取线上分区表的初始创建脚本,反复修改测试后,没有得到理想结果,特求教各位~!!!

建表脚本

DROP TABLE TEST PURGE;

create table TEST  (tID NUMBERnot null,tname  VARCHAR2(320))tablespace USERS
partition by LIST(tID) (partition P0 VALUES ( 0));
alter table TEST add constraint PK_test primary key (tid)  using INDEX  LOCAL tablespace USERS;


ALTER TABLE TEST ADD PARTITION p1 VALUES(1);
ALTER TABLE TEST ADD PARTITION p2 VALUES(2);
ALTER TABLE TEST ADD PARTITION p3 VALUES(3);
ALTER TABLE TEST ADD PARTITION p4 VALUES(4);
ALTER TABLE TEST ADD PARTITION p5 VALUES(5);

导出DDL的脚本
set pagesize 0
set long 90000
set feedback off
set echo off
--导出文件名称
spool D:\1_table.sql
--输出信息采用缩排或换行格式化
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'PRETTY', TRUE);
--确保每个语句都带分号
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SQLTERMINATOR', TRUE);


--关闭表索引、外键等关联(后面单独生成)
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS', TRUE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'REF_CONSTRAINTS', TRUE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'CONSTRAINTS_AS_ALTER', TRUE);
--关闭存储、表空间属性
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'STORAGE', FALSE);
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'TABLESPACE', TRUE);
--关闭创建表的PCTFREE、NOCOMPRESS等属性,(FALSE时,TABLESPACE默认关闭 )
EXEC DBMS_METADATA.set_transform_param(DBMS_METADATA.session_transform, 'SEGMENT_ATTRIBUTES', FALSE);--这个FALSE后,表空间也就过滤掉了。
--创建用户对象
SELECT dbms_metadata.get_ddl(u.object_type, u.object_name)
  FROM user_objects u
WHERE u.object_type IN ('TABLE')
  AND u.object_name ='TEST';
spool off;



脚本导出结果:
  CREATE TABLE "SLW"."TEST"                                                     
   (        "TID" NUMBER NOT NULL ENABLE,                                             
        "TNAME" VARCHAR2(320)                                                         
   )                                                                           
  PARTITION BY LIST ("TID")                                                     
(PARTITION "P0"  VALUES (0) NOCOMPRESS ,                                       
PARTITION "P1"  VALUES (1) NOCOMPRESS ,                                       
PARTITION "P2"  VALUES (2) NOCOMPRESS ,                                       
PARTITION "P3"  VALUES (3) NOCOMPRESS ,                                       
PARTITION "P4"  VALUES (4) NOCOMPRESS ,                                       
PARTITION "P5"  VALUES (5) NOCOMPRESS ) ;                                      
  ALTER TABLE "SLW"."TEST" ADD CONSTRAINT "PK_TEST" PRIMARY KEY ("TID") ENABLE;
                                                                                


想要的结果是:
表和主键都带表空间,并把除P0外的其他分区去掉。(保持和创建表时的语句一样)

create table TEST  (tID NUMBERnot null,tname  VARCHAR2(320)) tablespace USERS
partition by LIST(tID) (partition P0 VALUES ( 0));
alter table TEST add constraint PK_test primary key (tid)  using INDEX  LOCAL tablespace USERS;



论坛徽章:
496
紫蜘蛛
日期:2007-09-26 17:05:56奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:53
2#
发表于 2018-7-5 21:48 | 只看该作者
你既然要保留表空间,为什么还要“关闭存储、表空间属性”?

如果所有的表都是同一个模式创建出来的,你自己用数据字典来拼凑DDL,这样就嫩满足你自己的需求。

使用道具 举报

回复
论坛徽章:
9
2013年新春福章
日期:2013-02-25 14:51:24灰彻蛋
日期:2013-02-28 17:57:18蜘蛛蛋
日期:2013-03-06 17:16:15茶鸡蛋
日期:2013-03-26 17:32:46雪佛兰
日期:2013-11-26 10:47:53优秀写手
日期:2014-01-22 06:00:12马上有车
日期:2014-04-16 17:19:19慢羊羊
日期:2015-03-04 14:53:332015年新春福章
日期:2015-03-06 11:58:39
3#
 楼主| 发表于 2018-7-6 10:08 | 只看该作者
newkid 发表于 2018-7-5 21:48
你既然要保留表空间,为什么还要“关闭存储、表空间属性”?

如果所有的表都是同一个模式创建出来的,你 ...

谢谢版主,我现在就是用最笨的方法,用字典自己拼sql呢

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表
http://www.vxiaotou.com