非分割槽錶轉換成分割槽表以及注意事項
有時候剛開始設計的時候沒考慮到資料歸檔。資料歸檔不是簡單的匯出delete。因為一般我們的資料庫都是delete不釋放空間。而我們一般資料庫遇到空間不足,就不得不面對這個問題。當然也可以做碎片整理的空間回收。我不太喜歡這樣,尤其大的表的時候。MySQL一旦超過100G的,線上環境我都不敢去做。Oracle的線上回收我做過20T的表,碎片800G,回收了一次做了55個小時(不停機)
我個人覺得最好的方式是採用分割槽,至於是遷移分割槽還是歸檔分割槽都好說。一般都是截斷分割槽這樣操作,很快。但是如果一個表之前沒有做分割槽怎麼辦?
我們舉例
create table b (id int ,a varchar2(10),time date);普通堆表
模擬5條資料
insert into b values (1,'a',sysdate-120);
insert into b values (2,'b',sysdate-90);
insert into b values (3,'c',sysdate-60);
insert into b values (4,'d',sysdate-30);
insert into b values (5,'e',sysdate);
一般來說我們都要使用到時間。所以時間建立索引。
create index b1 on b (time);
一般表都有主鍵,在Oracle中應該使用業務單據號來作為主鍵,在MySQL中用ID自增無業務含義。在PG中按照Oracle的來就行。
Alter table b add constraint pkb primary key(id);
為B表增加主鍵,這裡注意一定要是自己命名的而不是資料庫自己命令的。因為正常主從都沒有問題,但是有OGG的場景這樣的話就是一個坑。後面我來講為什麼。
ALTER TABLE b MODIFY
PARTITION BY RANGE (time)
(
PARTITION b1 VALUES LESS THAN (TO_DATE ('2022-03-01', 'YYYY-MM-DD')),
PARTITION b2 VALUES LESS THAN (TO_DATE ('2022-04-01', 'YYYY-MM-DD')),
PARTITION b3 VALUES LESS THAN (TO_DATE ('2022-05-01', 'YYYY-MM-DD')),
PARTITION b4 VALUES LESS THAN (TO_DATE ('2022-06-01', 'YYYY-MM-DD')),
PARTITION b5 VALUES LESS THAN (TO_DATE ('2022-07-01', 'YYYY-MM-DD'))
) online
UPDATE INDEXES
(
pkb GLOBAL,
b1 LOCAL
);
這個就是線上把非分割槽錶轉換成分別表的命令。注意紅色部分我這裡指定了主鍵名,如果是自動的那麼就是自動的名字。上面講的坑就在這裡,因為在OGG場景下,目標端也就是下游資料庫的自動的名字和源端上游不一樣。執行這個命令時候就會引發OGG的中斷。
那麼這個是資料庫的問題還是OGG的問題?我覺得都不是,是熟悉產品的問題。執行完畢以後看到表已經變成分割槽的了。
這個時候再截斷過期資料只要drop partition就可以了,當然注意一個UPDATE GLOBAL INDEXES;否則會出現資料無法寫入的問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/637517/viewspace-2904267/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 非分割槽錶轉換成分割槽表
- IMPDP分割槽表注意事項
- SQL Server 表分割槽注意事項HXSQLServer
- SD卡分割槽時需要注意什麼?SD卡分割槽注意事項SD卡
- 電腦硬碟分割槽要注意什麼,刪除硬碟分割槽的注意事項硬碟
- [Hive]hive分割槽設定注意事項Hive
- PG的非分割槽表線上轉分割槽表
- Oracle 12C新特性-線上把非分割槽錶轉為分割槽表Oracle
- Oracle 12.2之後ALTER TABLE .. MODIFY轉換非分割槽表為分割槽表Oracle
- MySQL線上轉分割槽表(以及TiDB)MySqlTiDB
- oracle分割槽表和分割槽表exchangeOracle
- oracle分割槽表和非分割槽表exchangeOracle
- PostgreSQL/LightDB 分割槽表之分割槽裁剪SQL
- 【ASK_ORACLE】使用insert語句將普通錶轉換成分割槽表Oracle
- SSD固態硬碟是分割槽好還是不分割槽好?SSD固態硬碟使用注意事項硬碟
- [oracle] expdp 匯出分割槽表的分割槽Oracle
- Oracle分割槽表基礎運維-07增加分割槽(3列表分割槽)Oracle運維
- Oracle分割槽表基礎運維-07增加分割槽(2 HASH分割槽)Oracle運維
- 【MYSQL】 分割槽表MySql
- oracle 分割槽表move和包含分割槽表的lob moveOracle
- 移動分割槽表和分割槽索引的表空間索引
- Oracle分割槽表基礎運維-07增加分割槽(1範圍分割槽)Oracle運維
- 第39期:MySQL 時間類分割槽寫 SQL 注意事項MySql
- linux交換分割槽Linux
- 【Linux】MBR磁碟分割槽表只能有四個分割槽?Linux
- Oracle分割槽表基礎運維-04列表分割槽Oracle運維
- MySQL 分割槽表探索MySql
- 分割槽表-實戰
- Linux分割槽方案、分割槽建議Linux
- Oracle分割槽表基礎運維-09刪除分割槽Oracle運維
- Oracle分割槽表基礎運維-05組合分割槽Oracle運維
- Oracle分割槽表基礎運維-02範圍分割槽Oracle運維
- Oracle分割槽表基礎運維-03HASH分割槽Oracle運維
- 分割槽表之自動增加分割槽(11G)
- Oracle分割槽表基礎運維-06分割槽表索引Oracle運維索引
- oracle 線上重新定義,普通表改變分割槽表,分割槽表可以更改型別、分割槽欄位等Oracle型別
- unbuntu新增交換分割槽
- HGDB的分割槽表實現SQL Server的分割槽檢視SQLServer