日韩性视频-久久久蜜桃-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ò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91亚瑟视频| 日本成人一二三区 | np视频| 久久一区二区电影 | 久久久久亚洲AV成人网人人小说 | 国产成人精品综合久久久久99 | 综合另类 | av站| 日本黄区免费视频观看 | 精品视频久久久久久久 | 成人午夜免费福利视频 | 美女久久久久久久 | 日本中文字幕二区 | www黄色com | 亚洲日本香蕉视频 | 草草屁屁影院 | 精精国产xxxx视频在线播放 | 第一页在线视频 | 亚洲人成无码网站久久99热国产 | 都市激情校园春色 | 亚洲性事 | 免费久久一级欧美特大黄 | 精品在线一区 | 国产福利久久 | 亚洲性视频网站 | av自拍 | 日韩免费一级 | 国产午夜三级 | 国产自产 | 日韩香蕉视频 | 精品理论片 | 综合色88 | 精品国产一区二区三区久久久久久 | 亚洲图片另类小说 | 污网站在线免费 | 国产视频在线免费观看 | 最新欧美大片 | 一本一道精品欧美中文字幕 | 综合精品久久 | 一眉道姑 | 毛片看看| 好吊色综合| 天天躁日日躁狠狠躁伊人 | 日本少妇久久久 | 特级淫片aaaaaaa级附近的 | 天天射日日操 | 91精品国产乱码在线观看 | 男女黄床上色视频 | 中文字幕精品一区二区三区精品 | 精品久久久久久久久中文字幕 | 久久中文av| 亚洲国产精品人人爽夜夜爽 | 午夜免费观看 | 麻豆短视频在线观看 | 极品国产在线 | 国产精品国产一区二区 | 日本高清视频在线播放 | 日韩欧美三级视频 | 国产精品一区二区久久久 | 日韩视频免费在线观看 | 神马午夜场 | 日韩一片 | 夜夜成人 | 玉女心经是什么意思 | 欧美三级一级 | 韩国主播青草55部完整 | 91免费观看入口 | 玖玖在线免费视频 | 欧美成人精品一区二区 | 久久久久99精品国产片 | 午夜视频入口 | 欧美1页 | 欧美成人一区在线观看 | 懂色av一区二区三区免费观看 | 久久久久久久久久91 | 黄站在线观看 | 国产原创精品 | 香蕉视频一区二区三区 | 中文字幕一区二区人妻视频 | 中文字幕日韩一区二区三区不卡 | 少妇xxx| 国产女主播一区 | wwwwww日本 | 国产欧美日韩在线 | 黄色一级网站 | 亚洲熟妇国产熟妇肥婆 | 台湾佬av| 精品久久免费视频 | 中文字幕日韩国产 | 一级伦理片 | 中文字幕第一区综合 | 综合网五月 | a毛片在线 | 成人调教视频 | 在线观看免费www | 成人在线观看免费高清 | 中国精品毛片 | 日本特级黄色录像 | 激情视频免费在线观看 |