日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle Online Redefinition在线重定义(下)

發(fā)布時(shí)間:2024/4/13 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle Online Redefinition在线重定义(下) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在之前的文章中,我們看到了如何處理單表在線重定義過程。本篇我們來看一下如何進(jìn)行關(guān)聯(lián)表的重定義過程。

?

4、外鍵關(guān)系表重定義

?

我們先創(chuàng)建出實(shí)驗(yàn)數(shù)據(jù)表。

?

?

SQL> create table t_master as select owner, table_name, tablespace_name, status from dba_tables where 1=0;

Table created

?

SQL> alter table t_master add constraint pk_t_master primary key (owner, table_name);

Table altered

?

Executed in 0.125 seconds

?

SQL> create table t_slave as select owner, table_name, column_name from dba_tab_columns where 1=0;

Table created

?

SQL> alter table T_SLAVE

? 2??? add constraint pk_t_slave primary key (OWNER, TABLE_NAME, COLUMN_NAME);

Table altered

?

Executed in 0.422 seconds

?

?

T_MASTERT_SLAVE構(gòu)成主子表關(guān)系,插入數(shù)據(jù)。

?

?

SQL> insert into t_master select owner, table_name, tablespace_name, status from dba_tables;

2841 rows inserted

?

Executed in 0.157 seconds

?

SQL> commit;

Commit complete

?

Executed in 0 seconds

?

SQL> insert into t_slave select owner, table_name, column_name from dba_tab_cols where (owner, table_name) in (select owner, table_name from dba_tables);

32388 rows inserted

?

Executed in 2.328 seconds

?

SQL> commit;

Commit complete

?

Executed in 0 seconds

?

SQL> alter table T_SLAVE

? 2??? add constraint fk_t_slave_master foreign key (OWNER, TABLE_NAME)

? 3??? references t_master (OWNER, TABLE_NAME);

Table altered

?

Executed in 0.266 seconds

?

?

創(chuàng)建interim中間表對象,主要目標(biāo)是將數(shù)據(jù)表按照owner進(jìn)行分區(qū),轉(zhuǎn)化為分區(qū)表。

?

?

SQL> create table t_master_interim

? 2? (owner varchar2(30),

? 3?? TABLE_NAME????? VARCHAR2(30),

? 4?? TABLESPACE_NAME VARCHAR2(30),

? 5?? STATUS????????? VARCHAR2(8)

? 6? )

? 7? partition by list(owner)

? 8? (

??9???? partition p1 values ('SYS'),

?10???? partition p2 values (default)

?11? )

?12? ;

?

Table created

?

Executed in 0.156 seconds

?

SQL> create table t_slave_interim

? 2? (owner varchar2(30),

? 3?? table_name varchar2(30),

? 4?? column_name varchar2(30)

? 5? )

? 6? partition by list(owner)

? 7? (

? 8???? partition p1 values ('SYS'),

? 9???? partition p2 values (default)

?10? )

?11? ;

?

Table created

?

Executed in 0.032 seconds

?

?

進(jìn)入正式的重定義流程。這個(gè)過程,如果處于安全和順序關(guān)系看,應(yīng)該是先子表后主表似乎好一點(diǎn)。筆者選擇了先主表后子表的方法。

?

?

--判斷是否可以進(jìn)行在線重定義過程;

SQL> set serveroutput on;

SQL> exec dbms_redefinition.can_redef_table('SCOTT','T_MASTER',options_flag => dbms_redefinition.cons_use_pk);

PL/SQL procedure successfully completed

?

Executed in 0.172 seconds

?

SQL> exec dbms_redefinition.can_redef_table('SCOTT','T_SLAVE',options_flag => dbms_redefinition.cons_use_pk);

PL/SQL procedure successfully completed

?

Executed in 0.015 seconds

?

?

T_MASTER表進(jìn)行重定義過程。

?

?

SQL> exec dbms_redefinition.start_redef_table('SCOTT','T_MASTER','T_MASTER_INTERIM',col_mapping => 'owner owner, table_name table_name, tablespace_name tablespace_name, status status',options_flag => dbms_redefinition.cons_use_pk);

?

PL/SQL procedure successfully completed

?

Executed in 1.125 seconds

?

SQL> exec dbms_redefinition.sync_interim_table('SCOTT','T_MASTER','T_MASTER_INTERIM');

PL/SQL procedure successfully completed

?

Executed in 0.047 seconds

?

SQL>

SQL> set serveroutput on;

SQL> declare

? 2??? error_count number:=0;

? 3? begin

? 4??? dbms_redefinition.copy_table_dependents(uname => 'SCOTT',orig_table => 'T_MASTER',

? 5??????????????????????????????????????????? int_table => 'T_MASTER_INTERIM',

? 6??????????????????????????????????????????? copy_indexes => dbms_redefinition.cons_orig_params,

? 7??????????????????????????????????????????? num_errors => error_count);

? 8??? dbms_output.put_line(to_char(error_count));

? 9? end;

?10? /

?

0

?

PL/SQL procedure successfully completed

Executed in 6.766 seconds

?

SQL> exec dbms_redefinition.finish_redef_table('SCOTT','T_MASTER','T_MASTER_INTERIM');

PL/SQL procedure successfully completed

?

Executed in 1.75 seconds

?

?

進(jìn)行T_SLAVE表重定義過程。

?

?

SQL> exec dbms_redefinition.start_redef_table('SCOTT','T_SLAVE','T_SLAVE_INTERIM',col_mapping => 'owner owner, table_name table_name, column_name column_name',options_flag => dbms_redefinition.cons_use_pk);

PL/SQL procedure successfully completed

Executed in 1.484 seconds

?

SQL> exec dbms_redefinition.sync_interim_table('SCOTT','T_SLAVE','T_SLAVE_INTERIM');

PL/SQL procedure successfully completed

Executed in 0.047 seconds

?

SQL>

SQL> set serveroutput on;

SQL> declare

? 2??? error_count number:=0;

? 3? begin

? 4??? dbms_redefinition.copy_table_dependents(uname => 'SCOTT',orig_table => 'T_SLAVE',

? 5??????????????????????????????????????????? int_table => 'T_SLAVE_INTERIM',

? 6??????????????????????????????????????????? copy_indexes => dbms_redefinition.cons_orig_params,

? 7??????????????????????????????????????????? num_errors => error_count);

? 8??? dbms_output.put_line(to_char(error_count));

? 9? end;

?10? /

?

0

?

PL/SQL procedure successfully completed

Executed in 6.718 seconds

?

SQL> exec dbms_redefinition.finish_redef_table('SCOTT','T_SLAVE','T_SLAVE_INTERIM');

PL/SQL procedure successfully completed

?

Executed in 1.75 seconds

?

?

最后,我們檢查處理結(jié)果。

?

?

--分區(qū)處理成功;

SQL> select table_name, partition_name from dba_tab_partitions where table_owner='SCOTT' and table_name in ('T_MASTER','T_SLAVE');

?

TABLE_NAME???????????????????? PARTITION_NAME

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

T_MASTER??????????????????? ???P1

T_MASTER?????????????????????? P2

T_SLAVE??????????????????????? P1

T_SLAVE??????????????????????? P2

?

Executed in 0.031 seconds

?

?

約束中存在一些需要額外處理的地方。

?

?

SQL> select constraint_name, constraint_type, R_CONSTRAINT_NAME from dba_constraints where wner='SCOTT' and table_name in ('T_MASTER','T_SLAVE');

?

CONSTRAINT_NAME??????????????? CONSTRAINT_TYPE R_CONSTRAINT_NAME

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

TMP$$_FK_T_SLAVE_MASTER0?????? R?????????????? TMP$$_PK_T_MASTER0

SYS_C0011276?????????????????? C??????????????

SYS_C0011275?????????????????? C??????????????

SYS_C0011274?????????????????? C??????????????

PK_T_SLAVE???????????????????? P??????????????

FK_T_SLAVE_MASTER????????????? R?????????????? PK_T_MASTER

SYS_C0011272?????????????????? C??????????????

SYS_C0011271?????????????????? C??????????????

PK_T_MASTER??????????????????? P??????????????

?

9 rows selected

?

Executed in 0.141 seconds

?

?

由于是分別進(jìn)行的重定義動(dòng)作,中間可能有關(guān)聯(lián)裹挾的情況,所以需要額外進(jìn)行一些處理。主要目標(biāo)是將Interim數(shù)據(jù)表刪除掉。

?

SQL> drop table t_slave_interim;

Table dropped

?

Executed in 0.438 seconds

?

SQL> alter table t_slave drop constraint "TMP$$_FK_T_SLAVE_MASTER0";

Table altered

?

Executed in 0.031 seconds

?

SQL> drop table t_master_interim purge;

Table dropped

?

Executed in 0.094 seconds

?

?

檢查約束情況。

?

?

SQL> select constraint_name, constraint_type, R_CONSTRAINT_NAME from dba_constraints where wner='SCOTT' and table_name in ('T_MASTER','T_SLAVE');

?

CONSTRAINT_NAME??????????????? CONSTRAINT_TYPE R_CONSTRAINT_NAME

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

PK_T_MASTER??????????????????? P??????????????

PK_T_SLAVE???????????????????? P??????????????

FK_T_SLAVE_MASTER????????????? R?????????????? PK_T_MASTER

SYS_C0011271?????????? ????????C??????????????

SYS_C0011272?????????????????? C??????????????

SYS_C0011274?????????????????? C??????????????

SYS_C0011275?????????????????? C??????????????

SYS_C0011276?????????????????? C??????????????

?

8 rows selected

?

Executed in 0.125 seconds

?

?

重定義成功。

?

5、結(jié)論和討論

?

Oracle在線重定義是一種非常強(qiáng)大的定義工具。這個(gè)系列只是介紹了該特性中最常用的一些流程和方法。其他一些諸如register對象和重命名的方法,在一些特定場合下有比較好的使用空間。

?

應(yīng)該說,Oracle在線重定義是一種平滑性能、減少鎖定、提高系統(tǒng)整體可用性的解決方案。從操作時(shí)間和空間消耗上,在線重定義并不具有很高的優(yōu)勢。對于7*24小時(shí)的系統(tǒng),該特性是一種不錯(cuò)的選擇。

?

總結(jié)

以上是生活随笔為你收集整理的Oracle Online Redefinition在线重定义(下)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产成a人亚洲精v品在线观看 | 日本伊人久久 | 三级国产网站 | 国产亚洲久一区二区 | 久久精品性爱视频 | 无码人妻一区二区三区在线视频 | 日批免费网站 | 久久久中文网 | 涩涩视频在线看 | 黄色高清网站 | 丁香一区二区 | 伊人久久网站 | 99精品一区二区 | 亚洲综合小说网 | 日日操日日爽 | 日韩 欧美 | 2020国产精品 | 亚洲国产一区二区a毛片 | 欧美精品日韩在线 | 国产亚洲激情 | 午夜激情成人 | 丰满的人妻hd高清日本 | jizz亚洲女人高潮大叫 | 亚洲在线免费观看视频 | 色婷婷av国产精品 | 成人免费视频网站在线观看 | 丝袜一区二区三区四区 | 91成年视频 | 国产欧美一区二区三区在线老狼 | 日韩成人免费av | 亚洲成人av免费 | 国产精品视频免费观看 | 国产精品久久久久无码av | 日本黄色网页 | 欧美成人乱码一二三四区免费 | 亚洲国产成人综合 | 国产淫语对白 | 国产亚洲精品成人无码精品网站 | 美女免费看片 | 最近中文字幕在线中文视频 | 欧美成人一区二区三区四区 | 二区三区免费 | 亚洲第一黄色网址 | 伦理一级片 | 91九色丨porny丨肉丝 | 黄色裸体视频 | 蜜桃91丨九色丨蝌蚪91桃色 | 免费a网站| 成人黄色三级 | 精品免费囯产一区二区三区 | 东方av在线免费观看 | 91精品久久久久久综合五月天 | 武林美妇肉伦娇喘呻吟 | 久久一区精品 | 成人p站在线观看 | 国产免费叼嘿网站免费 | 免费毛片大全 | 亚洲欧美日韩精品一区 | 91丝袜呻吟高潮美腿白嫩 | 喷水视频在线观看 | 欧美成人aaa片一区国产精品 | 97人人精品 | 大桥未久中文字幕 | 毛片天天看 | 亚洲精品国产精品乱码视色 | wwwxx日本| 999国产精品视频 | 中文字幕日韩欧美 | 欧美午夜视频 | 久久久性 | 美女隐私直播 | 亚洲第一网址 | 中文字幕一区二区三区手机版 | 国产日韩一区二区在线观看 | 色视频网 | 好吊视频一区二区三区 | 久久久精品视频免费 | 毛片视| 91美女片黄在线观看 | 天天天天躁天天爱天天碰2018 | 国产美女作爱视频 | 免费av成人 | 国产精品一区二区三 | 亚洲一级片网站 | 午夜精品美女久久久久av福利 | 免费看黄视频的网站 | 色偷偷噜噜噜亚洲男人的天堂 | 国产精品色网 | 欧美高清成人 | 日韩a级一片 | 国产午夜毛片 | 欧美人妻一区二区三区 | 国产亚洲网站 | 糖心vlog精品一区二区 | 久久成人18免费观看 | 96久久久 | 免费在线亚洲 | 成人在线直播 | 伊人国产女 |