真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

oracle11g在線重定義普通表變分區(qū)表

第一種方法

創(chuàng)新互聯(lián)公司是一家專(zhuān)注于成都網(wǎng)站建設(shè)、網(wǎng)站制作與策劃設(shè)計(jì),河?xùn)|網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:河?xùn)|等地區(qū)。河?xùn)|做網(wǎng)站價(jià)格咨詢:13518219792

    使用主鍵id進(jìn)行重定義

--create user test identified by 1 account unlock; 

--grant resource 

--grant create any table, alter any table, drop any table, lock any table, select any table to test; 

--<1> 創(chuàng)建測(cè)試表,以下使用在線重定義把表轉(zhuǎn)換為分區(qū)表,created為分區(qū)鍵, object_id 為主鍵

drop table test01 purge;

create table test01 as select * from dba_objects where object_id is not null;

alter table test01 add primary key(object_id); 

select * from test01;

--<2> 創(chuàng)建分區(qū)表

create table test01_new 

partition by range(created)

--INTERVAL(NUMTOYMINTERVAL(1,'month'))

interval(numtodsinterval(1,'day'))

store in (users)

(

  partition p0 values less than (to_date('2008-01-01','yyyy-mm-dd') )

as select * from test01 where created is not null and 1!=1;

alter table test01_new add primary key(object_id); 

--判斷目標(biāo)表是否可以使用主鍵進(jìn)行在線重定義,也可以使用rowid

exec dbms_redefinition.can_redef_table('TEST', 'TEST01', dbms_redefinition.cons_use_pk);

--把用戶test的test01表的定義改為test01_new表的定義

exec dbms_redefinition.start_redef_table('TEST', 'TEST01', 'TEST01_NEW');

--將中間表與原始表同步。(僅當(dāng)要對(duì)表 TEST01 進(jìn)行更新時(shí)才需要執(zhí)行該操作。)

exec dbms_redefinition.sync_interim_table('TEST', 'TEST01', 'TEST01_NEW');

--結(jié)束重定義表

exec dbms_redefinition.finish_redef_table('TEST', 'TEST01', 'TEST01_NEW');

--如果重定義失敗,解鎖

exec dbms_redefinition.abort_redef_table('TEST', 'TEST01', 'TEST01_NEW');

--優(yōu)點(diǎn):

--保證數(shù)據(jù)的一致性,在大部分時(shí)間內(nèi),表T都可以正常進(jìn)行DML操作。

--只在切換的瞬間鎖表,具有很高的可用性。這種方法具有很強(qiáng)的靈活性,對(duì)各種不同的需要都能滿足。

--而且,可以在切換前進(jìn)行相應(yīng)的授權(quán)并建立各種約束,可以做到切換完成后不再需要任何額外的管理操作。

--

--不足:實(shí)現(xiàn)上比上面兩種略顯復(fù)雜,適用于各種情況。

--然而,在線表格重定義也不是完美無(wú)缺的。下面列出了Oracle9i重定義過(guò)程的部分限制:

--你必須有足以維護(hù)兩份表格拷貝的空間。

--你不能更改主鍵欄。

--表格必須有主鍵。

--必須在同一個(gè)大綱中進(jìn)行表格重定義。

--在重定義操作完成之前,你不能對(duì)新加欄加以NOT NULL約束。

--表格不能包含LONG、BFILE以及用戶類(lèi)型(UDT)。

--不能重定義鏈表(clustered tables)。

--不能在SYS和SYSTEM大綱中重定義表格。

--不能用具體化視圖日志(materialized VIEW logs)來(lái)重定義表格;不能重定義含有具體化視圖的表格。

--不能在重定義過(guò)程中進(jìn)行橫向分集(horizontal subsetting)

第二種方法

使用rowid進(jìn)行重定義,一般在沒(méi)有主鍵的情況下使用

--其他如上

--判斷目標(biāo)表是否可以使用主鍵進(jìn)行在線重定義,也可以使用rowid

exec dbms_redefinition.can_redef_table('TEST', 'TEST01', dbms_redefinition.cons_use_rowid);

--把用戶test的test01表的定義改為test01_new表的定義

exec dbms_redefinition.start_redef_table('TEST', 'TEST01', 'TEST01_NEW',null,2);

--將中間表與原始表同步。(僅當(dāng)要對(duì)表 TEST01 進(jìn)行更新時(shí)才需要執(zhí)行該操作。)

exec dbms_redefinition.sync_interim_table('TEST', 'TEST01', 'TEST01_NEW');

--結(jié)束重定義表

exec dbms_redefinition.finish_redef_table('TEST', 'TEST01', 'TEST01_NEW');

--如果重定義失敗,解鎖

exec dbms_redefinition.abort_redef_table('TEST', 'TEST01', 'TEST01_NEW');

第三種方法

--<3>重命名表

alter table test01  rename to test01_bak;

alter table test01_bak rename to test01 ;

--<4>檢查是否缺漏數(shù)據(jù),補(bǔ)齊數(shù)據(jù)

select * from test01 t1

where up_time is not null --索引鍵不能有空數(shù)據(jù),否則插入失敗

  and not exists (select 1 from test01  t2 where t1.id = t2.id )

insert into test01 

select * from test01_bak  t1

where up_time is not null --索引鍵不能有空數(shù)據(jù),否則插入失敗

  and not exists (select 1 from test01  t2 where t1.id = t2.id )


分享名稱:oracle11g在線重定義普通表變分區(qū)表
文章路徑:http://weahome.cn/article/jhdjjc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部