GBase 8a安全重建表的一個方案
當由於某些原因需要重建表時,需要鎖定表,避免該表在重建期間又被更改,導致新表和老表資料不一致。本文提供一個應用層的安全重建方案。
方案內容
該方案通過如下幾個步驟來實現
- 鎖住表
- 建一個新表,結構和原有的一樣
- 將資料從原有表遷移到新表
- 將原有表改名
- 將新表改名成原有表
- 釋放鎖
- 將改名的老表刪除【可選】
實現例子
如下的一個shell指令碼,傳入2個引數,庫名和表名,連線資料庫的使用者名稱和密碼,需要根據實際情況做修改。其中的sign是方便查詢哪些表做了處理的一個臨時表名標誌。
如下例子沒有包含刪除老表的部分,建議進行人工確認後,再刪除老表,避免操作失誤導致資料丟失。
該指令碼開始清理了殘留表,為了安全,預設是註釋掉的。
[gbase@rh6-1 ~]$ cat gbase_rebuild_table.sh dbname=$1 tablename=$2 sign='ABCDEFG' echo --${tablename}-- gccli -ugbase -pXXXXX -vvv -D${dbname} <<EOF -- drop table if exists ${tablename}_${sign}_OLD; -- drop table if exists ${tablename}_${sign}_NEW; lock table ${tablename} write; create table ${tablename}_${sign}_NEW like ${tablename}; insert into ${tablename}_${sign}_NEW select * from ${tablename}; rename table ${tablename} to ${tablename}_${sign}_OLD; rename table ${tablename}_${sign}_NEW to ${tablename}; unlock tables; EOF [gbase@rh6-1 ~]$
執行效果
[gbase@rh6-1 ~]$ sh gbase_rebuild_table.sh testdb t2 --t2-- -------------- drop table if exists t2_ABCDEFG_OLD -------------- Query OK, 0 rows affected, 3 warnings (Elapsed: 00:00:00.11) -------------- drop table if exists t2_ABCDEFG_NEW -------------- Query OK, 0 rows affected, 3 warnings (Elapsed: 00:00:00.23) -------------- lock table t2 write -------------- Query OK, 0 rows affected (Elapsed: 00:00:00.00) -------------- create table t2_ABCDEFG_NEW like t2 -------------- Query OK, 0 rows affected (Elapsed: 00:00:00.39) -------------- insert into t2_ABCDEFG_NEW select * from t2 -------------- Query OK, 0 rows affected (Elapsed: 00:00:00.10) Records: 0 Duplicates: 0 Warnings: 0 -------------- rename table t2 to t2_ABCDEFG_OLD -------------- Query OK, 0 rows affected (Elapsed: 00:00:01.24) -------------- rename table t2_ABCDEFG_NEW to t2 -------------- Query OK, 0 rows affected (Elapsed: 00:00:00.93) -------------- unlock tables -------------- Query OK, 0 rows affected (Elapsed: 00:00:00.00) Bye
對其它業務的影響
經測試,在lock期間,該表可以繼續查詢,但所有DML,DDL將阻塞,直到unlock tables. 之後阻塞的SQL將繼續執行,或者阻塞超時而報錯退出。
連線斷開,鎖會自動釋放。
持有表鎖的session,該表被rename, 甚至drop,並不會導致鎖被釋放。其它session如果對該表做操作,依然會等待表鎖。
gbase> create table t2 like t1; ^CQuery aborted by Ctrl+C ERROR 1727 (HY000): try to lock in gcluster failed: (GBA-02LO-0002) Failed to lock: [testdb.t2580D5F90-B287-4199-B057-E6FBD44B5BFA] GC_AIS_ERR_EXIST
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69979525/viewspace-2840304/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一 GBase 8a MPP Cluster安裝部署
- 徵文 | 收穫,不止GBase 8a——GBase 8a培訓總結與感受
- GBase 8a中一個字元佔用位元組數說明字元
- Hadoop 和 GBase 8a 的區別Hadoop
- 乾貨分享|GBase 8a叢集雙活容災方案
- 趣說GBase 8a資料庫叢集(一)資料庫
- 生態 | 湖倉一體的優選:GBase 8a MPP + XEOS
- 六 GBase 8a MPP Cluster升級
- 七 GBase 8a MPP Cluster解除安裝
- 九 GBase 8a備份和恢復
- Gbase 8a資料庫節點替換資料庫
- 三 GBase 8a MPP Cluster叢集擴容
- 四 GBase 8a MPP Cluster叢集縮容
- 五 GBase 8a MPP Cluster節點替換
- 徵文 | 學習GBase 8a新型分析資料庫資料庫
- 二 GBase 8a MPP Cluster客戶端安裝客戶端
- GBase 8a 叢集修改 IP 地址操作步驟
- 【GBASE的那些事兒】系列直播活動第03期《GBase 8a產品全景能力展示》
- 十一 GBase 8a MPP Cluster後設資料查詢
- 趣說GBase 8a資料庫叢集(三)—之高可用特性資料庫
- 使用者之聲 | 對於GBase 8a資料庫學習的感悟資料庫
- GBase 8a MPP助力澳門某銀行打造MPP架構的新一代資料平臺架構
- Teradata宣佈退出中國 GBase 8a是其替換的不二之選
- 記一次Oracle分割槽表全域性索引重建的過程Oracle索引
- GBase 8a MPP Cluster V9 叢集輕鬆應對多租戶需求
- 安裝部署GBase 8a MPP資料庫對於伺服器作業系統的要求資料庫伺服器作業系統
- 企業雲盤,一個安全高效的資料儲存方案
- oracle重建索引(一)Oracle索引
- GBase 8a MPP CLuster資料庫2022年第8期培訓圓滿結束資料庫
- GBase 8a MPP CLuster資料庫2022年第3期培訓圓滿結束資料庫
- 南大通用GBase 8a中標吉林銀行MPP資料庫採購專案資料庫
- GBase 庫中查詢表的列資訊
- SQL Server 操作要重建表被禁止SQLServer
- 南大通用+英特爾 GBase 8a大規模分散式並行數處理(MPP)資料庫叢集系統解決方案3.0分散式並行資料庫
- 新春開課 | 歡迎參加GBase 8a MPP CLuster資料庫2月訓練營資料庫
- 分享一個「實時三維人臉重建」的開源專案
- 2021資料技術嘉年華 · ON LINE GBase 8a在信創平臺的效能優化與實踐優化
- 認證培訓 | 歡迎參加GBase 8a MPP Cluster資料庫5月訓練營資料庫