利用DBMS_REDEFINITION包將非分區表轉化成分區表

来源:https://www.cnblogs.com/sky2088/archive/2018/04/03/8709821.html
-Advertisement-
Play Games

將普通表格轉化分區表的方法大致有四種: A. 通過 Export/import 方法B. 通過 Insert with a subquery 方法C. 通過 Partition Exchange 方法D. 通過 DBMS_REDEFINITION 方法 下麵舉例使用DBMS_REDEFINITION ...


 

將普通表格轉化分區表的方法大致有四種:

A. 通過 Export/import 方法
B. 通過 Insert with a subquery 方法
C. 通過 Partition Exchange 方法
D. 通過 DBMS_REDEFINITION 方法

 

下麵舉例使用DBMS_REDEFINITION的方法將普通表格轉化成分區表

1.創建測試表

SQL> CREATE TABLE T(
a NUMBER,
y number,
name VARCHAR2(100),
date_used date,
constraint pk_ay primary key(a,y));

Table created.

 

2.生成測試數據

begin
for i in 1 .. 1000
loop
for j in 1 .. 1000
loop
insert into t values ( i, j, dbms_random.random, sysdate-j );
end loop;
end loop;
end;
/
PL/SQL procedure successfully completed.

SQL> commit;

Commit complete.

 

3.收集T表格的統計信息

SQL> EXEC DBMS_STATS.gather_table_stats('SCOTT', 'T', cascade => TRUE);

PL/SQL procedure successfully completed.


SQL> SELECT num_rows FROM user_tables WHERE table_name = 'T';

NUM_ROWS
----------
1000000


4.創建分區表(中間臨時表)

SQL> CREATE TABLE p_t(
a NUMBER,
y number,
name VARCHAR2(100),
date_used DATE)
PARTITION BY RANGE (date_used)
(PARTITION unpar_table_15 VALUES LESS THAN (TO_DATE('01/01/2016', 'DD/MM/YYYY')),
PARTITION unpar_table_16 VALUES LESS THAN (TO_DATE('01/01/2017', 'DD/MM/YYYY')),
PARTITION unpar_table_17 VALUES LESS THAN (TO_DATE('01/01/2018', 'DD/MM/YYYY')),
PARTITION unpar_table_MX VALUES LESS THAN (MAXVALUE));

Table created.


5.檢驗表格能否重定義
SQL> exec dbms_Redefinition.can_redef_table('SCOTT', 'T');

PL/SQL procedure successfully completed.

 

6.開始線上重定義,此過程會創建物化視圖P_T和物化視圖日誌MLOG$_T
SQL> BEGIN
DBMS_REDEFINITION.start_redef_table(
uname => 'SCOTT',
orig_table => 'T',
int_table => 'P_T');
END;
/

PL/SQL procedure successfully completed.

SQL> select count(*) from t;

COUNT(*)
----------
1000000

Elapsed: 00:00:00.05
SQL> select count(*) from p_t;

COUNT(*)
----------
1000000

SQL> select mview_name,container_name, build_mode from user_mviews;

MVIEW_NAME             CONTAINER_NAME                  BUILD_MOD
------------------------------ ------------------------------           ---------
P_T                                       P_T                                  PREBUILT

 

7. 向原表插入1000行數據,檢查MLOG$_T表是否記錄了更新

SQL> begin
for i in 1001 .. 1010
loop
for j in 1001 .. 1100
loop
insert into t values ( i, j, dbms_random.random, sysdate-j );
end loop;
end loop;
end;
/

PL/SQL procedure successfully completed.


SQL> commit;

Commit complete.


SQL> select count(*) from MLOG$_T;

COUNT(*)
----------
1000

 

8.運行dbms_redefinition.sync_interim_table 填充表數據,在執行 dbms_redefinition.finish_redef_table前可以多次執行

SQL> BEGIN
dbms_redefinition.sync_interim_table(
uname => 'SCOTT',
orig_table => 'T',
int_table => 'P_T');
END;
/

PL/SQL procedure successfully completed.

SQL> select count(*) from p_t;

COUNT(*)
----------
1001000

 

SQL> ALTER TABLE p_t ADD (CONSTRAINT p_t_pk PRIMARY KEY (a,y));

Table altered.


SQL> EXEC DBMS_STATS.gather_table_stats('SCOTT', 'P_T', cascade => TRUE);

PL/SQL procedure successfully completed.

 

 

9.使用dbms_redefinition.finish_redef_table 交換表名,過程中原表T會被鎖定。

SQL> BEGIN
dbms_redefinition.finish_redef_table(
uname => 'SCOTT',
orig_table => 'T',
int_table => 'P_T');
END;
/

PL/SQL procedure successfully completed.


10.驗證重定義的結果

SQL> SELECT partitioned FROM user_tables WHERE table_name = 'T';

PAR
---
YES

 

SQL> SELECT partition_name, num_rows FROM user_tab_partitions WHERE table_name = 'T';

PARTITION_NAME NUM_ROWS
------------------------------ ----------
UNPAR_TABLE_15      178000
UNPAR_TABLE_16      366000
UNPAR_TABLE_17      365000
UNPAR_TABLE_MX     92000


11.刪除中間臨時表
drop TABLE p_t cascade constraints;

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、以單機模式啟動成員節點 有時候出於維護的需要,需要以單機模式啟動某個節點而不是一個副本集成員身份。 1).首先查詢伺服器命令行參數 2).關閉當前副本 3).以單機模式啟動副本 這裡需要指定副本原先的db路徑,為了避免可能的其它連接這裡可以指定一個新的port啟動;也可以直接使用原先的配置文件啟 ...
  • 1、如果要實現文件的拖放就必須安裝lrzsz 2、解壓(看命令就可以) 3、刪除一些不必要的文件 4、修改配置文件 ...
  • 1、修改本機上的YUM源配置文件,將源指向自己 cd /etc/yum.repos.d/ 備份原有的YUM源的配置文件 rename .repo .repo.bak * rename CentOS-Media.repo.bak CentOS-Media.repo * 修改配置文件 2、掛載光碟 在m ...
  • 一、storm何許人也?Storm 是Twitter的一個開源框架。Storm一個分散式的、容錯的實時計算系統,它被托管在GitHub上,遵循 Eclipse Public License 1.0。Storm是由BackType開發的實時處理系統,BackType現在已在Twitter麾下。GitH ...
  • 問題: 127.0.0.1:6379> set name 張泰松OK127.0.0.1:6379> get name"\xe5\xbc\xa0\xe6\xb3\xb0\xe6\x9d\xbe"set name 是中文,但 get 出來的卻不是中文 解決辦法: 127.0.0.1:6379> quit ...
  • 本文目錄:1.創建存儲過程、函數 1.1 存儲過程的IN、OUT和INOUT2.修改和刪除存儲過程、函數3.查看存儲過程、函數信息 在MySQL/MariaDB中,存儲過程(stored procedure)、存儲函數(stored function)、觸發器(trigger)、事件(event)統 ...
  • 今天我們就來分析微社區的基本功能構成吧。首先,每個論壇最主要的是會員在對應的版塊下發帖,或者在感興趣的主題帖下跟帖蓋樓。其次,會員能時時看到帖子或版塊的基本信息。所以主要大塊是: 前臺:會員的註冊登錄,瀏覽版塊,發帖,跟帖,對自己的帖子操作,回覆別人的帖子 後臺:管理員對版塊進行分級管理,添加或修改 ...
  • 深圳雲棲大會已經圓滿落幕,在3月29日飛天技術匯-彈性計算、網路和CDN專場中,阿裡雲CDN高級技術專家周哲為我們帶來了《海量短視頻極速分發》的主題分享,帶領我們從視頻內容採集、上傳、存儲和分發的角度介紹整體方案,並且重點講解短視頻加速的註意事項和用戶體驗優化要點。 講解從三個部分展開:短視頻應用場 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...