哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

系統(tǒng)上線時SQL腳本的9大坑

jf_78858299 ? 來源:蘇三說技術(shù) ? 作者:蘇三說技術(shù) ? 2023-04-24 17:10 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

系統(tǒng)上線時,非常容易出問題。

即使之前在測試環(huán)境,已經(jīng)執(zhí)行過SQL腳本了。但是有時候,在系統(tǒng)上線時,在生產(chǎn)環(huán)境執(zhí)行相同的SQL腳本,還是有可能出現(xiàn)一些問題。

有些小公司,SQL腳本是開發(fā)自己執(zhí)行的,有很大的風(fēng)險。

有些大廠,有專業(yè)的DBA把關(guān),但DBA也不是萬能的,還是有可能會讓一些錯誤的SQL腳本被生產(chǎn)環(huán)境執(zhí)行了,比如:update語句的順序不對。

今天跟大家一起聊聊,系統(tǒng)上線時SQL腳本的9大坑,以便于大家吸取教訓(xùn),能夠防微杜漸,希望對你會有所幫助。

1 漏腳本了

我們上線時執(zhí)行的SQL腳本,出現(xiàn)次數(shù)最多的問題,應(yīng)該是漏腳本了。

  • 有時候少加了一個字段。
  • 有時候字段的注釋沒有及時修改。
  • 有時候有些新表沒創(chuàng)建。
  • 有時候字段類型忘了修改。

等等。

我們的SQL腳本中漏腳本的情況有很多。

那么,如何解決這個問題呢?

答:將SQL腳本做成代碼的一部分。在項目的代碼中,創(chuàng)建一個專門的sql目錄,在該目錄下根據(jù)每個迭代創(chuàng)建一個子目錄,比如:mv3.2.1,將SQL腳本存放到mv3.2.1下。

我們在開發(fā)環(huán)境任何對表的相關(guān)操作,比如:增加字段、修改字段類型、修改注釋、增加索引、創(chuàng)建表等等,都需要通過SQL語句操作,然后把該SQL語句,整理到SQL腳本中。

最后提交到公司的GitLab上,我們在測試環(huán)境和生產(chǎn)環(huán)境發(fā)版時,去GitLab上找相關(guān)迭代版本的SQL腳本執(zhí)行。

通過該方式基本可以解決漏腳本的問題。

2 腳本語法錯誤

有些小伙伴看到這個標(biāo)題可能有點懵,SQL腳本不是已經(jīng)在測試環(huán)境執(zhí)行過了嗎?為什么還會出現(xiàn)語法錯誤?

比如說有這樣的場景:原本你的SQL腳本沒問題的,但沒有按照規(guī)范,給一張表的添加多個字段,你寫了多條ALTER語句。

例如:

alter table t_user add column  `work` varchar(30) DEFAULT NULL COMMENT '工作';
alter table t_user add column  `provice` varchar(10) DEFAULT NULL  COMMENT '籍貫';

在上線時,你給DBA提SQL工單時,該工單被DBA審核拒絕打回來了。

然后為了趕時間,你急急忙忙把多條ALTER語句改成一條ALTER語句。

例如:

alter table t_user add `work` varchar(30) DEFAULT NULL COMMENT '工作',
add `provice` varchar(10) DEFAULT NULL  COMMENT '籍貫';

但在修改的過程中,有地方少了一個逗號,就可能會出現(xiàn)SQL語法錯誤。

因此,不管是什么SQL語句,要養(yǎng)成好習(xí)慣,只要修改了一定要記得到開發(fā)環(huán)境的數(shù)據(jù)庫中,先執(zhí)行測試一下,切勿直接提到生產(chǎn)環(huán)境,即使你有很大的把握,也需要再更慎重一些。

這樣基本可以避免SQL語法錯誤的問題。

3 腳本順序不對

有些時候,我們在上線系統(tǒng)時,DBA在執(zhí)行SQL腳本的時候,沒有報錯,但最后的數(shù)據(jù)就是不對。

有可能是腳本順序不對導(dǎo)致的。

比如有這樣一種場景:你往某張表通過insert初始化了一條數(shù)據(jù)。

例如:

INSERT INTO `sue`.`t_user`(`id`, `code`, `age`, `name`, `height`, `address`, `work`, `provice`) VALUES (1, '101', 21, '周星馳', 173, '香港', NULL, NULL);

另外一個人要基于你這條數(shù)據(jù),通過update修改數(shù)據(jù)。

例如:

update t_user set age=25 where id=1;

你們提了兩條SQL腳本。

另外一個人先提的,你后提的。

DBA先把他的SQL工單審核通過了,先update數(shù)據(jù),此時通過id是沒法找到那條數(shù)據(jù)的,影響行數(shù)為0。

然后DBA再審核你的SQL工單,審核通過了,插入了一條數(shù)據(jù)。

由于SQL腳本的順序不對,導(dǎo)致最終系統(tǒng)上線時的數(shù)據(jù)不對。

那么這個問題要如何解決呢?

雙方要事先溝通好,把另外一個同事的SQL腳本加到你的初始化腳本中,你的腳本在初始化時,直接去修改數(shù)據(jù)即可。

例如:

INSERT INTO `sue`.`t_user`(`id`, `code`, `age`, `name`, `height`, `address`, `work`, `provice`) VALUES (1, '101', 25, '周星馳', 173, '香港', NULL, NULL);

這樣可以避免執(zhí)行順序問題。

4 執(zhí)行時機不對

有些系統(tǒng)功能已經(jīng)上線了,在后面的迭代中,為了盡量避免少影響線上功能,可以增加一個pre(即預(yù)生產(chǎn)環(huán)境)。

該環(huán)境跟生產(chǎn)環(huán)境是差不多的,連接了相同的數(shù)據(jù)庫,使用了相同的apollo配置。

但唯一的區(qū)別是pre環(huán)境沒有實際的用戶流量,只能公司內(nèi)部人員才能訪問。

一般在迭代版本上線之前,先要把系統(tǒng)功能發(fā)布到pre環(huán)境中,測試通過之后,才能發(fā)布到prod(即生產(chǎn)環(huán)境)。

但有些SQL腳本,卻沒法再pre環(huán)境中執(zhí)行,不然會影響生產(chǎn)環(huán)境。

比如:修改了字段類型,int改成varchar了,或者初始化數(shù)據(jù)時,初始化了一條新加的枚舉數(shù)據(jù)。

由于pre環(huán)境是運行的最新代碼,但prod環(huán)境還是運行的老代碼。

如果在發(fā)布pre環(huán)境時,直接執(zhí)行SQL腳本,可能會導(dǎo)致prod環(huán)境的功能異常。

因此要搞清楚SQL腳本的執(zhí)行時機,哪些是要在pre環(huán)境執(zhí)行的,哪些是要在prod環(huán)境執(zhí)行的。

我們在提SQL工單時,千萬不要一股腦就提了,一定要區(qū)分時機。

在發(fā)pre環(huán)境時,要么不提發(fā)prod環(huán)境的SQL腳本。要么,在工單的名稱上做區(qū)分,比如增加prod_開頭的標(biāo)識。

這樣可以解決SQL腳本執(zhí)行時機的問題。

5 搞錯數(shù)據(jù)庫了

有時候,我們的數(shù)據(jù)庫做了分庫分表,或者增加備份庫

在執(zhí)行SQL腳本的時候,由于我們自己的疏忽,提SQL工單時選錯數(shù)據(jù)庫了,或者DBA的疏忽,在執(zhí)行SQL工單時搞錯數(shù)據(jù)庫了,就會出現(xiàn)問題。

建議我們的SQL腳本增加庫名,比如:

alter table sue.t_user add `work` varchar(30) DEFAULT NULL COMMENT '工作';

這里增加庫名:sue。

這樣基本可以避免選錯數(shù)據(jù)庫的問題。

6 腳本耗時太長

有時候,我們的SQL腳本需要批量修改生產(chǎn)環(huán)境的一些數(shù)據(jù),正常情況下一條update語句就能搞定。

例如:

update user set status=0 where status=1;

但由于user表的數(shù)據(jù)量非常大,我們在執(zhí)行該SQL腳本之前,沒有預(yù)先評估該SQL腳本的耗時情況,而選擇直接在生產(chǎn)環(huán)境的數(shù)據(jù)庫中執(zhí)行。

假如該SQL腳本耗時非常長,比如要10分鐘才能執(zhí)行完,可能會導(dǎo)致user表長期鎖表,影響正常的業(yè)務(wù)功能。

在該SQL腳本執(zhí)行的過程中,極有可能會出現(xiàn)業(yè)務(wù)功能操作,導(dǎo)致的死鎖問題。

因此,建議這種大批量的數(shù)據(jù)更新操作,要在用戶較少的凌晨,分批多次執(zhí)行。

我們要盡可能少的影響線上用戶的功能。

此外,在生產(chǎn)環(huán)境增加字段,增加索引等操作,也能會導(dǎo)致長期鎖表。也要避免在用戶訪問高峰期執(zhí)行相關(guān)的SQL腳本。

7 腳本無法回滾

絕大多數(shù)系統(tǒng)上線是能夠成功的,雖然過程中會遇到很多問題,但如果能夠及時解決,也能夠上線成功

但如果有些問題,沒法再規(guī)定的時間內(nèi)解決,很有可能會導(dǎo)致上線失敗

如果上線失敗,意味著代碼和數(shù)據(jù)庫的SQL腳本要回滾。

如果只回滾了代碼,不回滾數(shù)據(jù)庫,可能會導(dǎo)致很多系統(tǒng)異常。

因此,我們在準(zhǔn)備SQL語句時,要留點心眼,順便想想該SQL語句能否回滾。

對于update語句可以加上修改時間:

update t_user set age=25,time=now(3) where id=1;

這樣可以通過該時間追溯一次SQL操作修改的數(shù)據(jù),方便后面做回滾。

有些時候我們要update的數(shù)據(jù),是要通過多條sql語句查詢出來的,比如:需要使用的id。

為了方便回滾我們可以增加臨時表,保存這些id,后面就能追溯了。

當(dāng)然有些開源的數(shù)據(jù)庫管理平臺,比如:Archery,是有自帶SQL審核和回滾的功能。

8 忘了加索引

我們在增加了字段之后,非常容易忽略的一件事是:加索引

特別是當(dāng)前表數(shù)據(jù)量很大,而且增加的字段是另外一張表的id時,這種情況強烈建議增加索引。

如果我們上線系統(tǒng)時,在SQL腳本中,忘了給該字段增加索引。如果該id字段被大批量訪問,全部走的全表掃描,可能會導(dǎo)致數(shù)據(jù)庫性能直線下降,出現(xiàn)大量的超時問題。

所以建議我們在開發(fā)的時候,如果要增加字段的話,要養(yǎng)成良好習(xí)慣,想一想這個字段需不需要建索引

如果不確定數(shù)據(jù)量的話,可以先到生產(chǎn)環(huán)境查詢一下真實的用戶數(shù)據(jù),不然后續(xù)可能會引起比較大的生產(chǎn)事故。

9 字段改名

對于生產(chǎn)環(huán)境的表字段,通常情況下,我們不允許修改名稱。

如果你在發(fā)布pre環(huán)境時,通過SQL腳本把某張表的某個字段名稱修改了,pre環(huán)境代碼使用了新的名稱,系統(tǒng)沒有問題。

但prod環(huán)境還是使用老的名稱,所有使用該名稱的sql語句,在代碼執(zhí)行過程中都會報錯。

因此,禁止在生產(chǎn)環(huán)境通過SQL腳本修改字段名稱。

當(dāng)然系統(tǒng)上線時除了SQL腳本的這些坑之外,還有系統(tǒng)發(fā)版失敗,代碼合錯分支,mq消息被pre消費了,無法回滾等等,還有很多問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    807

    瀏覽量

    46940
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    411

    瀏覽量

    29277
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    MySQL 刪庫后怎么恢復(fù)?binlog2sql 之外,NineData 還能做什么

    很多團隊遇到 MySQL 誤刪、誤更新時,第一反應(yīng)都是搜 binlog2sql。它確實能解決一部分問題,但企業(yè)生產(chǎn)環(huán)境中真正缺的,往往不是單點回滾腳本,而是從變更提交、預(yù)檢、審批、執(zhí)行到追蹤和回滾
    的頭像 發(fā)表于 04-15 11:49 ?68次閱讀
    MySQL 刪庫后怎么恢復(fù)?binlog2<b class='flag-5'>sql</b> 之外,NineData 還能做什么

    設(shè)備在線狀態(tài)監(jiān)測系統(tǒng)選型最容易忽略的3個隱藏成本(附避指南)

    當(dāng)下制造業(yè)數(shù)字化轉(zhuǎn)型中,設(shè)備在線狀態(tài)監(jiān)測系統(tǒng)已成工廠降本增效、實現(xiàn)預(yù)測性維護的核心工具,但超70%的企業(yè)上線后實際落地成本遠(yuǎn)超初始預(yù)算,近30%的企業(yè)額外支出甚至超過系統(tǒng)采購價。不少設(shè)備經(jīng)理和數(shù)
    的頭像 發(fā)表于 04-13 13:41 ?101次閱讀
    設(shè)備在線狀態(tài)監(jiān)測<b class='flag-5'>系統(tǒng)</b>選型最容易忽略的3個隱藏成本(附避<b class='flag-5'>坑</b>指南)

    NineData SQL AI 智能補全上線:寫 SQL,不必每次都從頭敲

    NineData推出SQLAI智能補全功能,通過AI技術(shù)實現(xiàn)上下文感知的SQL語句智能提示。該功能不僅能補全關(guān)鍵字,還能根據(jù)當(dāng)前輸入內(nèi)容預(yù)測后續(xù)查詢意圖,顯著提升多表關(guān)聯(lián)、復(fù)雜條件等場景下的編寫效率
    的頭像 發(fā)表于 04-01 20:19 ?283次閱讀
    NineData <b class='flag-5'>SQL</b> AI 智能補全<b class='flag-5'>上線</b>:寫 <b class='flag-5'>SQL</b>,不必每次都從頭敲

    采購晶振怕被?這份避手冊請收好

    在電子元器件采購清單里,晶振常被視為“小角色”,但它卻是決定設(shè)備時鐘精度、通信穩(wěn)定性的核心部件。不少采購新手因?qū)д裾J(rèn)知不足,在選型、議價、交付等環(huán)節(jié)頻頻踩,輕則導(dǎo)致批量返工,重則影響項目進度
    的頭像 發(fā)表于 03-24 14:22 ?1134次閱讀
    采購晶振怕被<b class='flag-5'>坑</b>?這份避<b class='flag-5'>坑</b>手冊請收好

    暴力風(fēng)扇驅(qū)動板采購避:這 3 類方案千萬別選

    暴力風(fēng)扇驅(qū)動板采購怎么避?多年量產(chǎn)經(jīng)驗總結(jié),拆解3類絕對不能選的驅(qū)動方案,幫你避開量產(chǎn)翻車、成本超支、售后爆炸的行業(yè)大坑
    的頭像 發(fā)表于 02-28 09:00 ?800次閱讀
    暴力風(fēng)扇驅(qū)動板采購避<b class='flag-5'>坑</b>:這 3 類方案千萬別選

    智能工廠改造踩?有人物聯(lián)網(wǎng)手把手教你挑對系統(tǒng)

    中小工廠砸?guī)资f搞智能改造,結(jié)果踩了最冤的:花 “智慧工廠系統(tǒng)” 的錢,買的只是個 “升級款工廠監(jiān)控系統(tǒng)”—— 只能看設(shè)備轉(zhuǎn)不轉(zhuǎn),沒法調(diào)生產(chǎn)、降能耗,錢直接打了水漂。智能改造選系統(tǒng),
    的頭像 發(fā)表于 12-19 14:20 ?414次閱讀
    智能工廠改造踩<b class='flag-5'>坑</b>?有人物聯(lián)網(wǎng)手把手教你挑對<b class='flag-5'>系統(tǒng)</b>

    Hummingbirdv2 E203 仿真排之路

    弄清楚它的基本邏輯,系統(tǒng)和軟件的版本確實非常折磨人,如果有docker就能方便很多?;仡櫼幌逻@個過程,最大的是ubunbu18.04的版本和iverilog 12的版本。
    發(fā)表于 10-31 09:22

    關(guān)于系統(tǒng)鏈接腳本的介紹

    一、隊伍介紹 本篇為蜂鳥E203系列分享第四篇,本篇介紹的內(nèi)容是系統(tǒng)鏈接腳本。 二、如何實現(xiàn)不同的下載模式? 實現(xiàn)三種不同的程序運行方式,可通過makefile的命令行指定不同的鏈接腳本,從而實現(xiàn)
    發(fā)表于 10-30 08:26

    MES系統(tǒng)指南

    架構(gòu)普及化 、 AI 算法工程化應(yīng)用 、 數(shù)字孿生技術(shù)落地 。MES 系統(tǒng)已逐漸成為企業(yè)實現(xiàn)生產(chǎn)智能化的核心引擎。以下結(jié)合行業(yè)數(shù)據(jù)與技術(shù)趨勢,為您解析國內(nèi)MES 系統(tǒng)廠商的競爭力,并提供選型避指南。 二、MES
    的頭像 發(fā)表于 10-29 13:46 ?528次閱讀

    【技術(shù)分享】正確編寫SysV Init腳本以實現(xiàn)Systemd兼容(上)

    嵌入式的ubuntu系統(tǒng)如何寫好SysVInit腳本呢?與system服務(wù)又有什么差別呢?一起隨著文章來探究吧。問題背景許多傳統(tǒng)Linux服務(wù)仍使用SysVInit腳本(/etc/init.d
    的頭像 發(fā)表于 10-28 11:45 ?845次閱讀
    【技術(shù)分享】正確編寫SysV Init<b class='flag-5'>腳本</b>以實現(xiàn)Systemd兼容(上)

    LuatOS腳本開發(fā)入門:嵌入式運行框架全解析!

    想搞懂LuatOS如何運行Lua腳本?本文深入剖析其嵌入式運行框架,涵蓋虛擬機加載、任務(wù)協(xié)程、系統(tǒng)初始化等關(guān)鍵環(huán)節(jié),適合初學(xué)者。 一、LuatOS 編程起步 1.1 底層固件怎么啟動 LuatOS
    的頭像 發(fā)表于 09-26 17:45 ?632次閱讀
    LuatOS<b class='flag-5'>腳本</b>開發(fā)入門:嵌入式運行框架全解析!

    嵌入式開發(fā)新選擇:LuatOS腳本框架入門教程

    流程 進一步詳細(xì)的說,LuatOS 的底層固件啟動腳本的流程如下: 1,系統(tǒng)上電或者復(fù)位后,底層固件(core)首先啟動,進行硬件
    的頭像 發(fā)表于 09-26 17:34 ?752次閱讀
    嵌入式開發(fā)新選擇:LuatOS<b class='flag-5'>腳本</b>框架入門教程

    SQL 通用數(shù)據(jù)類型

    SQL 通用數(shù)據(jù)類型 數(shù)據(jù)庫表中的每個列都要求有名稱和數(shù)據(jù)類型。Each column in a database table is required to have a name and a
    的頭像 發(fā)表于 08-18 09:46 ?863次閱讀

    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    SQL Server數(shù)據(jù)庫故障: SQL Server數(shù)據(jù)庫被加密,無法使用。 數(shù)據(jù)庫MDF、LDF、log日志文件名字被篡改。
    的頭像 發(fā)表于 06-25 13:54 ?844次閱讀
    數(shù)據(jù)庫數(shù)據(jù)恢復(fù)—<b class='flag-5'>SQL</b> Server數(shù)據(jù)庫被加密如何恢復(fù)數(shù)據(jù)?

    達夢數(shù)據(jù)庫常用管理SQL命令詳解

    達夢數(shù)據(jù)庫常用管理SQL命令詳解
    的頭像 發(fā)表于 06-17 15:12 ?7654次閱讀
    達夢數(shù)據(jù)庫常用管理<b class='flag-5'>SQL</b>命令詳解
    泰顺县| 武平县| 景宁| 吉安县| 逊克县| 沙坪坝区| 岗巴县| 神农架林区| 板桥市| 兴文县| 广东省| 东乌珠穆沁旗| 石狮市| 额敏县| 会同县| 奉化市| 府谷县| 潞西市| 宜宾县| 内乡县| 区。| 孟连| 焦作市| 金塔县| 罗江县| 浦东新区| 扎鲁特旗| 宜兰县| 金湖县| 双峰县| 宽甸| 沭阳县| 南溪县| 苗栗县| 扶余县| 枣阳市| 聂拉木县| 烟台市| 美姑县| 深水埗区| 如皋市|