DDL操作內部執行原理

來源:互聯網
上載者:User

Ddl操作實際上在內部被轉化一系列的dml語句進行執行

跟蹤ddl操作,查看Oracle後台資料字典自動執行的內容:

scott@ORCL>conn / as sysdba;

已串連。

sys@ORCL>alter session set events '10046trace name context forever,level 12';

會話已更改。

sys@ORCL>create table trace_ddl asselect * from dba_users;

表已建立。

sys@ORCL>select value from v$diag_infowhere name='Default Trace File'; 

VALUE

----------------------------------------

d:\app\lenovo\diag\rdbms\orcl\orcl\trace

\orcl_ora_7460.trc

 

查看該檔案中的內容:

 

首先記錄的建立語句:

PARSING IN CURSOR #2 len=49 dep=0 uid=0oct=1 lid=0 tim=6439856921 hv=1016677043 ad='7ffbd8a2020' sqlid='6urykycy9khpm'

create table trace_ddl as select * fromdba_users

END OF STMT

 

向obj中增加記錄的dml語句

PARSING IN CURSOR #4 len=216 dep=1 uid=0oct=2 lid=0 tim=6439892002 hv=714380553 ad='7ffc849c3c0' sqlid='4bjwv5sp99589'

insert intoobj$(owner#,name,namespace,obj#,type#,ctime,mtime,stime,status,remoteowner,linkname,subname,dataobj#,flags,oid$,spare1,spare2,spare3)values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18)

END OF STMT

 

更新con$表的資訊:
PARSING IN CURSOR #4 len=61 dep=1 uid=0 oct=6 lid=0 tim=6439918579hv=4246113160 ad='7ffbdca6628' sqlid='bajr90ryjd2w8'

update con$ set con#=:3,spare1=:4 whereowner#=:1 and name=:2

END OF STMT

 

增加段資訊,向seg$表插入資料的語句:

PARSING IN CURSOR #4 len=259 dep=1 uid=0oct=2 lid=0 tim=6440002337 hv=1814305607 ad='7ffbd89ed80' sqlid='g7mt7ptq286u7'

insert into seg$(file#,block#,type#,ts#,blocks,extents,minexts,maxexts,extsize,extpct,user#,iniexts,lists,groups,cachehint,hwmincr,spare1, scanhint, bitmapranges) values(:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,DECODE(:17,0,NULL,:17),:18,:19)

END OF STMT

 

向col$增加欄位資訊:

PARSING IN CURSOR #4 len=453 dep=1 uid=0oct=2 lid=0 tim=6440042013 hv=224718466 ad='7ffbdca27b8' sqlid='60uw2vh6q9vn2'

insert intocol$(obj#,name,intcol#,segcol#,type#,length,precision#,scale,null$,offset,fixedstorage,segcollength,deflength,default$,col#,property,charsetid,charsetform,spare1,spare2,spare3)values(:1,:2,:3,:4,:5,:6,decode(:5,182/*DTYIYM*/,:7,183/*DTYIDS*/,:7,decode(:7,0,null,:7)),decode(:5,2,decode(:8,-127/*MAXSB1MINAL*/,null,:8),178,:8,179,:8,180,:8,181,:8,182,:8,183,:8,231,:8,null),:9,0,:10,:11,decode(:12,0,null,:12),:13,:14,:15,:16,:17,:18,:19,:20)

END OF STMT

 

Oracle通過將ddl解析為dml操作,並且將這些操作全部記錄在資料字典中,通過將這些資訊反向解析,可以得到原始的建立語句

 

 

通過dbms_metadata可以得到原始的建立語句:

 

sys@ORCL>SELECTDBMS_METADATA.GET_DDL('TABLE','TRACE_DDL') FROM DUAL;

 

DBMS_METADATA.GET_DDL('TABLE','TRACE_DDL')

--------------------------------------------------------------------------------

 

 CREATE TABLE "SYS"."TRACE_DDL"

  (    "USERNAME" VARCHAR2(30)NOT NULL ENABLE,

      "USER_ID" NUMBER NOT NULL ENABLE,

      "PASSWORD" VARCHAR2(30),

      "ACCOUNT_STATUS" VARCHAR2(32) NOT NULL ENABLE,

      "LOCK_DATE" DATE,

      "EXPIRY_DATE" DATE,

      "DEFAULT_TABLESPACE" VARCHAR2(30) NOT NULL ENABLE,

      "TEMPORARY_TABLESPACE" VARCHAR2(30) NOT NULL ENABLE,

      "CREATED" DATE NOT NULL ENABLE,

      "PROFILE" VARCHAR2(30) NOT NULL ENABLE,

      "INITIAL_RSRC_CONSUMER_GROUP" VARCHAR2(30),

      "EXTERNAL_NAME" VARCHAR2(4000),

      "PASSWORD_VERSIONS"VARCHAR2(8),

      "EDITIONS_ENABLED" VARCHAR2(1),

      "AUTHENTICATION_TYPE" VARCHAR2(8)

  )PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING

 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645

 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULTFLASH_CACHE DEFAULT CELL_FLA

SH_CACHE DEFAULT)

 TABLESPACE "SYSTEM"

查看建表語句有另一個辦法:

1. exp username/pwd@service_name file=?rows=n

2. imp username/pwd@service_name file=?show=y log=? tables=?

執行完exp/imp之後,可以在imp的log檔案中查看到相關表的建表語句,和與該表相關的其他資料庫物件的ddl語句,如索引、觸發器等。

如果在imp的參數中以 fromuser, touser 來代替tables,會在log檔案中看到該模式內所有對象的ddl語句。

兩台Oracle之間配置OGG-未配置同步DDL 

Oracle GoldenGate 11g單向DDL配置實戰 

Oracle利用dbms_metadata.get_DDL查看DDL語句 

Oracle使用系統級觸發器禁用DDL語句 

Oracle使用系統級觸發器審計重要帳號的DDL語句 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.