SQL審核優(yōu)化建議在數(shù)據(jù)變更工單中的應(yīng)用
DMS安全規(guī)則中的SQL審核優(yōu)化建議,可以對SQL Console或數(shù)據(jù)變更工單中執(zhí)行的SQL進(jìn)行規(guī)范性檢查(例如表要有備注、表需要包含某些列),并提出相關(guān)優(yōu)化建議(例如無鎖數(shù)據(jù)變更推薦),輔助DBA審核SQL語句,提高研發(fā)質(zhì)量。本文將演示設(shè)置部分SQL審核規(guī)則,并執(zhí)行數(shù)據(jù)變更工單。
背景信息
DMS的安全規(guī)則中已生成默認(rèn)的SQL審核規(guī)范檢查規(guī)則,例如:表要有備注
、插入語句不能為not null列插入null值
、插入語句中insert字段名不能重復(fù)
。
SQL規(guī)范檢查及SQL優(yōu)化建議概覽,請參見配置SQL審核優(yōu)化建議。
準(zhǔn)備工作
本文在演示操作前提前創(chuàng)建了migration_job
表,建表語句如下:
CREATE TABLE `migration_job` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`gmt_create` datetime NOT NULL COMMENT '創(chuàng)建時(shí)間',
`ref_id` bigint(20) unsigned NOT NULL COMMENT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='測試';
若實(shí)例的管控模式為安全協(xié)同,您可以額外創(chuàng)建安全規(guī)則集,并將數(shù)據(jù)庫實(shí)例關(guān)聯(lián)目標(biāo)安全規(guī)則集。具體操作,請參見新增安全規(guī)則和應(yīng)用安全規(guī)則。
步驟一:配置安全規(guī)則
如下為您介紹配置安全協(xié)同模式的SQL審核優(yōu)化建議規(guī)則。若需要調(diào)整自由操作和穩(wěn)定變更模式的SQL審核優(yōu)化建議規(guī)則,請單擊對應(yīng)管控模式右側(cè)的SQL審核優(yōu)化建議即可調(diào)整。
- 登錄數(shù)據(jù)管理DMS 5.0。
單擊控制臺左上角的圖標(biāo),選擇
。說明若您使用的是非極簡模式的控制臺,在頂部菜單欄中,選擇
。單擊目標(biāo)安全規(guī)則右側(cè)操作列下的編輯。
- 在詳情頁左側(cè)的導(dǎo)航欄中,單擊SQL審核優(yōu)化建議。
單擊表要有主鍵規(guī)則右側(cè)的編輯。
說明您可以單擊標(biāo)記(選擇規(guī)則生效的范圍,包含DDL語句、DML語句)、行為動作、狀態(tài)(開啟或關(guān)閉)右側(cè)的圖標(biāo),進(jìn)行快速篩選。
在規(guī)則內(nèi)容配置彈窗中,配置如下信息。本示例將行為動作設(shè)置為必須改進(jìn)。
說明系統(tǒng)初始化規(guī)則中不包含必須改進(jìn)。關(guān)于行為動作的更多說明,請參見系統(tǒng)行為動作。
單擊確定。
在后續(xù)的數(shù)據(jù)開發(fā)、數(shù)據(jù)變更及SQL審核等功能中,SQL審核優(yōu)化建議將根據(jù)配置的安全規(guī)則檢驗(yàn)SQL語句。
步驟二:執(zhí)行數(shù)據(jù)變更
- 登錄數(shù)據(jù)管理DMS 5.0。
單擊控制臺左上角的圖標(biāo),選擇
。說明若您使用的是非極簡模式的控制臺,在頂部菜單欄中,選擇
。在數(shù)據(jù)變更工單申請頁面,配置相關(guān)參數(shù),并單擊提交申請。
說明關(guān)于參數(shù)的說明,請參見普通數(shù)據(jù)變更。
選擇已關(guān)聯(lián)目標(biāo)安全規(guī)則集的數(shù)據(jù)庫實(shí)例。
數(shù)據(jù)變更的SQL代碼如下:
CREATE TABLE test1 ( id bigint COMMENT 'id', name varchar(60) COMMENT 'name' ) DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_bin ENGINE = INNODB; INSERT INTO migration_job(id, ref_id, gmt_create, gmt_create) VALUES(1, null, now(), now());
工單提交后,系統(tǒng)將根據(jù)步驟一中配置的安全規(guī)則進(jìn)行規(guī)范檢查。
SQL審核優(yōu)化建議對會提交的語句進(jìn)行規(guī)范審核,本示例產(chǎn)生:1項(xiàng)必須改進(jìn)意見、 2項(xiàng)潛在問題、 1項(xiàng)建議改進(jìn)意見。
單擊查看詳情,將鼠標(biāo)光標(biāo)移動至SQL審核報(bào)錯(cuò)項(xiàng)上,查看具體的意見。
根據(jù)提示信息,單擊修改SQL,優(yōu)化SQL代碼,并單擊確認(rèn)修改。
修改內(nèi)容為:
在
CREATE
語句中增加test1
表的主鍵與備注。在
INSERT
語句中刪除重復(fù)字段gmt_create
,并對ref_id
字段插入值。
修改后的SQL代碼如下:
CREATE TABLE test1 ( id bigint PRIMARY KEY COMMENT 'id', name varchar(60) COMMENT 'name' ) DEFAULT CHARSET = utf8mb4 COLLATE utf8mb4_bin ENGINE = INNODB COMMENT = '備注'; INSERT INTO migration_job(id, ref_id, gmt_create) VALUES(1, 2, now());
系統(tǒng)將再次進(jìn)行預(yù)檢查。
檢查通過。
單擊提交審批,并等待管理員審批通過。
審批通過后,會生成執(zhí)行任務(wù)。
審批通過后,單擊執(zhí)行變更,在任務(wù)設(shè)置對話框中設(shè)置任務(wù)執(zhí)行參數(shù),并單擊確定執(zhí)行。
說明創(chuàng)建工單時(shí),如果執(zhí)行方式選擇審批通過后,自動執(zhí)行,系統(tǒng)會自動跳過此步驟。
已暫停的任務(wù)重啟后,將從暫停位置繼續(xù)執(zhí)行腳本。
配置項(xiàng)
說明
執(zhí)行策略
選擇執(zhí)行策略:
立即執(zhí)行:單擊確定執(zhí)行后,立即執(zhí)行工單任務(wù)。
定時(shí)執(zhí)行:指定任務(wù)開始執(zhí)行的時(shí)間。例如,在2024年05月22日0時(shí)執(zhí)行任務(wù)。
開啟整體事務(wù)
選擇是否開啟整體事務(wù),默認(rèn)關(guān)閉。
開啟:執(zhí)行失敗則全部回滾(僅限D(zhuǎn)ML,DDL不在范圍內(nèi))。
關(guān)閉:逐條提交SQL任務(wù),執(zhí)行失敗則終止任務(wù),但不回滾。
開啟備份
選擇是否開啟備份,默認(rèn)開啟。開啟后,后續(xù)您才可以使用備份文件快速恢復(fù)數(shù)據(jù)。
說明僅執(zhí)行UPDATE和DELETE語句時(shí),支持備份數(shù)據(jù)。
MongoDB和Redis不支持備份數(shù)據(jù)。
開啟:執(zhí)行
UPDATE
、DELETE
語句前,系統(tǒng)自動生成對應(yīng)的備份腳本附件。如果數(shù)據(jù)庫類型為MySQL和MariaDB,生成
REPLACE INTO
備份語句。說明MySQL包括:RDS MySQL、PolarDB MySQL版、PolarDB分布式版、其他來源MySQL。
如果數(shù)據(jù)庫類型為除MySQL、MariaDB外的其他引擎,生成
INSERT
備份語句。
關(guān)閉:不生成備份附件。
說明SQL任務(wù)的執(zhí)行會受到安全規(guī)則中SQL執(zhí)行控制模塊的監(jiān)控,例如SQL執(zhí)行前數(shù)據(jù)庫鎖超時(shí)機(jī)制、數(shù)據(jù)庫負(fù)載檢查、SQL執(zhí)行后Sleep策略等。如需修改默認(rèn)的檢測點(diǎn)設(shè)置,請參考配置SQL執(zhí)行控制。
工單執(zhí)行成功后,在操作列單擊詳情,可查看工單執(zhí)行狀態(tài)、執(zhí)行次數(shù)、影響行數(shù)、執(zhí)行腳本、日志等信息。
工單執(zhí)行成功后,您可以進(jìn)入目標(biāo)數(shù)據(jù)庫的SQL窗口,查看數(shù)據(jù)變更是否符合預(yù)期。
其他操作
工單執(zhí)行成功后,您可單擊詳情按鈕,查看執(zhí)行日志,包括執(zhí)行語句、執(zhí)行所用時(shí)間、調(diào)度詳情等信息。