用dbms_metadata.get_ddl()提取DDL指针[讨论]_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
3
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 5031 | 回复: 2   主题: 用dbms_metadata.get_ddl()提取DDL指针[讨论]        下一篇 
yapingtian
注册用户
等级:上等兵
经验:127
发帖:14
精华:0
注册:2012-3-23
状态:离线
发送短消息息给yapingtian 加好友    发送短消息息给yapingtian 发消息
发表于: IP:您无权察看 2012-3-23 11:42:46 | [全部帖] [楼主帖] 楼主

dbms_metadata.get_ddl()提取DDL指针

适用于:

Oracle数据库企业版——Version: 9.0 to 10.2

这篇文档里的信息适用于任何平台

假设db证明或正常运行抛出许多的ORA-12700's or ORA-01578's or ORA-01499's在开发总体指标表明警报日志表坏了。

如果很简单的退出和创建表空间,获得再创建指针的语法就更复杂了

下面这个例子是为了任何的新的9i 或 10g DB

sqlplus /nolog
conn system/oracle
select index_name from dba_indexes
where tablespace_name ='EXAMPLE' and index_name like 'E%'
order by 1 asc;
EMP_EMAIL_UK
EMP_EMP_ID_PK
EMP_DEPARTMENT_IX
EMP_JOB_IX
EMP_MANAGER_IX
EMP_NAME_IX
Method
DBMS_METADATA.GET_DDL (
object_type IN VARCHAR2,
name IN VARCHAR2,
schema IN VARCHAR2 DEFAULT NULL,
version IN VARCHAR2 DEFAULT 'COMPATIBLE',
model IN VARCHAR2 DEFAULT 'ORACLE',
transform IN VARCHAR2 DEFAULT 'DDL')
RETURN CLOB;
to get the DDL.
Example
select dbms_metadata.get_ddl('INDEX', 'EMP_EMAIL_UK', 'HR') from dual;
Run
set heading off
set echo off
set flush off
set pagesize 9999
set linesize 9999
set long 9999
spool rcindscr.sql
select 'select dbms_metadata.get_ddl("INDEX", "'||index_name||'", "'||owner||'") from dual;'
from dba_indexes where tablespace_name='EXAMPLE' and index_name like 'E%';
spool off
result: (after converting double quotes to single quotes in a text editor):
select dbms_metadata.get_ddl('INDEX', 'EMP_EMAIL_UK', 'HR') from dual;
select dbms_metadata.get_ddl('INDEX', 'EMP_EMP_ID_PK', 'HR') from dual;
select dbms_metadata.get_ddl('INDEX', 'EMP_DEPARTMENT_IX', 'HR') from dual;
select dbms_metadata.get_ddl('INDEX', 'EMP_JOB_IX', 'HR') from dual;
select dbms_metadata.get_ddl('INDEX', 'EMP_MANAGER_IX', 'HR') from dual;
select dbms_metadata.get_ddl('INDEX', 'EMP_NAME_IX', 'HR') from dual;


现在,让我们看一下得到了什么:

set heading off
set echo off
set flush off
set pagesize 3999
set linesize 3999
set long 3999
set longc 3999
spool indsyntax.sql
select dbms_metadata.get_ddl('INDEX', 'EMP_EMAIL_UK', 'HR') from dual;
select dbms_metadata.get_ddl('INDEX', 'EMP_EMP_ID_PK', 'HR') from dual;
select dbms_metadata.get_ddl('INDEX', 'EMP_DEPARTMENT_IX', 'HR') from dual;
select dbms_metadata.get_ddl('INDEX', 'EMP_JOB_IX', 'HR') from dual;
select dbms_metadata.get_ddl('INDEX', 'EMP_MANAGER_IX', 'HR') from dual;
select dbms_metadata.get_ddl('INDEX', 'EMP_NAME_IX', 'HR') from dual;
spool off


(注: 上面甩用的“SET”命令是非常重要的)

结果会用SQL语句运行

CREATE UNIQUE INDEX "HR"."EMP_EMAIL_UK" ON "HR"."EMPLOYEES" ("EMAIL")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "EXAMPLE"
/
CREATE UNIQUE INDEX "HR"."EMP_EMP_ID_PK" ON "HR"."EMPLOYEES" ("EMPLOYEE_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "EXAMPLE"
/
CREATE INDEX "HR"."EMP_DEPARTMENT_IX" ON "HR"."EMPLOYEES" ("DEPARTMENT_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "EXAMPLE"
/
CREATE INDEX "HR"."EMP_JOB_IX" ON "HR"."EMPLOYEES" ("JOB_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "EXAMPLE"
/
CREATE INDEX "HR"."EMP_MANAGER_IX" ON "HR"."EMPLOYEES" ("MANAGER_ID")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "EXAMPLE"
/
CREATE INDEX "HR"."EMP_NAME_IX" ON "HR"."EMPLOYEES" ("LAST_NAME", "FIRST_NAME")
PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0
FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "EXAMPLE"
/




赞(0)    操作        顶端 
斗破苍穹
注册用户
等级:中尉
经验:442
发帖:3
精华:0
注册:2016-1-8
状态:离线
发送短消息息给斗破苍穹 加好友    发送短消息息给斗破苍穹 发消息
发表于: IP:您无权察看 2016-3-21 15:44:41 | [全部帖] [楼主帖] 2  楼

觉得蛮有用的!



赞(0)    操作        顶端 
wuli涛涛
注册用户
等级:下士
经验:192
发帖:1
精华:0
注册:2016-2-17
状态:离线
发送短消息息给wuli涛涛 加好友    发送短消息息给wuli涛涛 发消息
发表于: IP:您无权察看 2016-3-22 23:25:06 | [全部帖] [楼主帖] 3  楼

不错的啊



赞(0)    操作        顶端 
总帖数
3
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论