PostgreSQL pg_upgrade

2021-09-13 17:36 更新

pg_upgrade — 升級(jí)PostgreSQL服務(wù)器實(shí)例

大綱

pg_upgrade -b oldbindir -B newbindir -d oldconfigdir -D newconfigdir [option...]

描述

pg_upgrade(之前被稱為pg_migrator) 允許存儲(chǔ)在PostgreSQL數(shù)據(jù)文件中的數(shù)據(jù)被升級(jí)到一個(gè)較晚 的PostgreSQL主版本而無需進(jìn)行主版本升級(jí)(例如從9.5.8到9.6.4或者從10.7到11.2)通常所需的數(shù)據(jù)轉(zhuǎn)儲(chǔ)/重載。 對(duì)于次版本升級(jí)(例如從9.6.2到9.6.3或者從10.1到10.2)則不需要這個(gè)程序。

主 PostgreSQL 發(fā)行通常會(huì)加入新的特性,這些新特性常常會(huì)更改系統(tǒng)表的 布局,但是內(nèi)部數(shù)據(jù)存儲(chǔ)格式很少會(huì)改變。pg_upgrade 使用這一事實(shí)來通過創(chuàng)建新系統(tǒng)表并且重用舊的用戶數(shù)據(jù)文件來執(zhí)行快速升級(jí)。 如果一個(gè)未來的主發(fā)行沒有把數(shù)據(jù)存儲(chǔ)格式改得讓舊數(shù)據(jù)格式不可讀取,這類 升級(jí)就用不上pg_upgrade(社區(qū)將嘗試避免這類情況)。

pg_upgrade會(huì)盡力(例如通過檢查兼容的編譯時(shí)設(shè) 置)確保新舊集簇在二進(jìn)制上也是兼容的,包括 32/64 位二進(jìn)制。保持 外部模塊也是二進(jìn)制兼容的也很重要,不過 pg_upgrade無法檢查這一點(diǎn)。

pg_upgrade 支持從 8.4.X 及其后版本升級(jí)到當(dāng)前的 PostgreSQL主發(fā)布,包括快照和 beta 發(fā)布。

選項(xiàng)

pg_upgrade接受下列命令行參數(shù):

-b bindir
--old-bindir=bindir

舊的 PostgreSQL 可執(zhí)行文件目錄; 環(huán)境變量PGBINOLD

-B bindir
--new-bindir=bindir

新的 PostgreSQL 可執(zhí)行文件目錄; 默認(rèn)為pg_upgrade所在的目錄; 環(huán)境變量PGBINNEW

-c
--check

只檢查集簇,不更改任何數(shù)據(jù)

-d configdir
--old-datadir=configdir

舊的集簇?cái)?shù)據(jù)目錄;環(huán)境變量 PGDATAOLD

-D configdir
--new-datadir=configdir

新的集簇?cái)?shù)據(jù)目錄;環(huán)境變量 PGDATANEW

-j
--jobs=njobs

要同時(shí)使用的進(jìn)程或線程數(shù)

-k
--link

使用硬鏈接來代替將文件拷貝到新集簇

-o options
--old-options options

直接傳送給舊 postgres命令的選項(xiàng),多個(gè)選項(xiàng)可以追加在后面

-O options
--new-options options

直接傳送給新 postgres命令的選項(xiàng),多個(gè)選項(xiàng)可以追加在后面

-p port
--old-port=port

舊的集簇端口號(hào);環(huán)境變量 PGPORTOLD

-P port
--new-port=port

新的集簇端口號(hào);環(huán)境變量 PGPORTNEW

-r
--retain

即使在成功完成后也保留 SQL 和日志文件

-s dir
--socketdir=dir

用于升級(jí)期間postmaster套接字的目錄;默認(rèn)是當(dāng)前目錄; 環(huán)境變量 PGSOCKETDIR

-U username
--username=username

集簇的安裝用戶名;環(huán)境變量 PGUSER

-v
--verbose

啟用詳細(xì)的內(nèi)部日志

-V
--version

顯示版本信息,然后退出

--clone

使用有效的文件克隆(在一些系統(tǒng)上也被稱為reflinks),而不是將文件拷貝到新群集。 這可以導(dǎo)致數(shù)據(jù)文件接近瞬時(shí)的復(fù)制,從而獲得-k/--link的速度優(yōu)勢(shì),同時(shí)保留舊群集不受影響。

文件克隆僅在某些操作系統(tǒng)和文件系統(tǒng)上得到支持。如果選中但不被支持,則 pg_upgrade運(yùn)行將會(huì)出錯(cuò)。 目前,它支持在Linux(內(nèi)核4.5或更高版本)上的Btrfs和XFS(在文件系統(tǒng)創(chuàng)建reflink支持),以及macOS上的APFS。

-?
--help

顯示幫助,然后退出

使用

下面是用pg_upgrade執(zhí)行一次升級(jí)的步驟:

  1. 移動(dòng)舊集簇(可選)

    如果你在使用一個(gè)與版本相關(guān)的安裝目錄(例如 /opt/PostgreSQL/13),你就不需要移動(dòng)舊的集簇。 圖形化的安裝程序會(huì)使用版本相關(guān)的安裝目錄。

    如果你的安裝目錄不是版本相關(guān)的(例如/usr/local/pgsql), 就有必要移動(dòng)當(dāng)前的 PostgreSQL 安裝目錄,以免它干擾新的 PostgreSQL安裝。一旦當(dāng)前的 PostgreSQL服務(wù)器被關(guān)閉,就可以安全地重命名 PostgreSQL 安裝目錄。假設(shè)舊目錄是 /usr/local/pgsql,你可以這樣:

    mv /usr/local/pgsql /usr/local/pgsql.old

    來重命名該目錄。

  2. 對(duì)于源碼安裝,編譯新版本

    用兼容舊集簇的configure標(biāo)記編譯新的 PostgreSQL 源碼。在開始升級(jí)之前,pg_upgrade 將檢查pg_controldata來確保所有設(shè)置都是兼容的。

  3. 安裝新的 PostgreSQL 二進(jìn)制文件

    安裝新服務(wù)器的二進(jìn)制文件和支持文件。pg_upgrade 會(huì)被包含在默認(rèn)的安裝中。

    對(duì)于源碼安裝,如果你希望把新服務(wù)器安裝在一個(gè)自定義的位置, 可以使用prefix變量:

    make prefix=/usr/local/pgsql.new install
    
  4. 初始化新的 PostgreSQL 集簇

    使用initdb初始化新集簇。這里也要使用與 舊集簇相兼容的initdb標(biāo)志。許多預(yù)編譯的 安裝程序會(huì)自動(dòng)做這個(gè)步驟。這里沒有必要啟動(dòng)新集簇。

  5. 安裝自定義的共享對(duì)象文件

    把舊集簇使用的所有自定義共享對(duì)象文件(或者 DLL)安裝到新集簇中, 例如pgcrypto.so,不管它們是來自于 contrib還是某些其他源碼。不要安裝模式定義 (例如CREATE EXTENSION pgcrypto),因?yàn)檫@些將會(huì)從舊集簇升級(jí)得到。 還有,任何自定義的全文搜索文件(詞典、同義詞、辭典、停用詞)也必須 被復(fù)制到新集簇中。

  6. 調(diào)整認(rèn)證

    pg_upgrade將會(huì)多次連接到舊服務(wù)器和新服務(wù)器,因此 你可能想要在pg_hba.conf中把認(rèn)證設(shè)置成 peer或者使用一個(gè)~/.pgpass文件(見 第 33.15 節(jié))。

  7. 停止兩個(gè)服務(wù)器

    確認(rèn)兩個(gè)數(shù)據(jù)庫服務(wù)器都被停止使用,例如在 Unix 上可以:

    pg_ctl -D /opt/PostgreSQL/9.6 stop
    pg_ctl -D /opt/PostgreSQL/13 stop
    

    或者在 Windows 上使用正確的服務(wù)名:

    NET STOP postgresql-9.6
    NET STOP postgresql-13
    

    直到后面的步驟之前,流復(fù)制和日志傳送后備服務(wù)器可以保持運(yùn)行。

  8. 為后備服務(wù)器升級(jí)做準(zhǔn)備

    如果正在使用小節(jié)步驟 10中給出的方法升級(jí)后備服務(wù)器,請(qǐng)對(duì)舊的主集簇和后備集簇運(yùn)行pg_controldata以驗(yàn)證舊的后備服務(wù)器已經(jīng)完全追上。驗(yàn)證Latest checkpoint location值在所有集簇中都匹配(如果舊后備服務(wù)器在舊的主服務(wù)器之前被關(guān)閉或者如果舊的后備服務(wù)器仍在運(yùn)行,則將會(huì)出現(xiàn)失配)。此外,請(qǐng)確保在新的主集簇上的 postgresql.conf文件中,wal_level未設(shè)置為minimal。

  9. 運(yùn)行 pg_upgrade

    總是應(yīng)該運(yùn)行新服務(wù)器而不是舊服務(wù)器的pg_upgrade二進(jìn)制文件。 pg_upgrade要求制定新舊集簇的數(shù)據(jù)和可執(zhí)行文件(bin)目錄。 你也可以指定用戶和端口值,以及你是否想要用鏈接或克隆來取代默認(rèn)的復(fù)制行為對(duì)數(shù)據(jù)文件進(jìn)行處理。

    如果你使用鏈接模式,升級(jí)將會(huì)快很多(不需要文件拷貝)并且將使用 更少的磁盤空間,但是在升級(jí)后一旦啟動(dòng)新集簇,舊集簇就無法被訪問。 鏈接模式也要求新舊集簇?cái)?shù)據(jù)目錄位于同一個(gè)文件系統(tǒng)中(表空間和 pg_wal可以在不同的文件系統(tǒng)中)。 克隆模式提供了相同的速度以及磁盤空間優(yōu)勢(shì),但不會(huì)導(dǎo)致新群集啟動(dòng)后舊群集不可用。 克隆模式還需要新舊數(shù)據(jù)目錄位于同一文件系統(tǒng)中。 此模式僅在某些操作系統(tǒng)和文件系統(tǒng)上可用。

    --jobs選項(xiàng)允許多個(gè) CPU 核心被用來復(fù)制/鏈接文件以及 并行地轉(zhuǎn)儲(chǔ)和重載數(shù)據(jù)庫模式。這個(gè)選項(xiàng)一個(gè)比較好的值是 CPU 核心數(shù) 和表空間數(shù)的最大值。這個(gè)選項(xiàng)可以顯著地減少升級(jí)運(yùn)行在一臺(tái)多處理 器機(jī)器上的多數(shù)據(jù)庫服務(wù)器的時(shí)間。

    對(duì)于 Windows 用戶,你必須以一個(gè)超級(jí)賬號(hào)登錄,并且以 postgres用戶啟動(dòng)一個(gè) shell 并且設(shè)置正確的路徑:

    RUNAS /USER:postgres "CMD.EXE"
    SET PATH=%PATH%;C:\Program Files\PostgreSQL\13\bin;
    

    并且用帶引號(hào)的目錄運(yùn)行pg_upgrade,例如:

    pg_upgrade.exe
            --old-datadir "C:/Program Files/PostgreSQL/9.6/data"
            --new-datadir "C:/Program Files/PostgreSQL/13/data"
            --old-bindir "C:/Program Files/PostgreSQL/9.6/bin"
            --new-bindir "C:/Program Files/PostgreSQL/13/bin"
    

    一旦啟動(dòng),pg_upgrade將驗(yàn)證兩個(gè)集簇是否兼容并且 執(zhí)行升級(jí)。你可以使用pg_upgrade --check來只執(zhí)行檢查, 這種模式即使在舊服務(wù)器還在運(yùn)行時(shí)也能使用。 pg_upgrade --check也將列出任何在更新后需要做的手工調(diào)整。 如果你將要使用鏈接或克隆模式,你應(yīng)該使用--link--clone選項(xiàng)和--check一起來啟用鏈接模式相關(guān)的檢查。 pg_upgrade要求在當(dāng)前目錄中的寫權(quán)限。

    顯然,沒有人可以在升級(jí)期間訪問這些集簇。pg_upgrade 默認(rèn)會(huì)在端口 50432 上運(yùn)行服務(wù)器來避免意外的客戶端連接。在做升級(jí)時(shí), 可以對(duì)兩個(gè)集簇使用相同的端口號(hào),因?yàn)樾屡f集簇不會(huì)在同時(shí)被運(yùn)行。不過, 在檢查一個(gè)舊的運(yùn)行中服務(wù)器時(shí),新舊端口號(hào)必須不同。

    如果在恢復(fù)數(shù)據(jù)庫模式時(shí)發(fā)生錯(cuò)誤,pg_upgrade將會(huì)退出 并且你必須按照下文步驟 16中所說的恢復(fù) 舊集簇。要再次嘗試pg_upgrade,你將需要修改 舊集簇,這樣 pg_upgrade 模式會(huì)成功恢復(fù)。如果問題是一個(gè) contrib模塊, 你可能需要從舊集簇中卸載該模塊并且在升級(jí)后重新把它安裝在新集簇中,不過 這樣做的前提是該模塊沒有被用來存儲(chǔ)用戶數(shù)據(jù)。

  10. 升級(jí)流復(fù)制和日志傳送后備服務(wù)器

    如果使用鏈接模式并且有流復(fù)制(見第 26.2.5 節(jié))或者日志 傳送(見第 26.2 節(jié))后備服務(wù)器,你可以遵照下面的 步驟對(duì)它們進(jìn)行快速的升級(jí)。你將不用在這些后備服務(wù)器上運(yùn)行 pg_upgrade,而是在主服務(wù)器上運(yùn)行rsync。 到這里還不要啟動(dòng)任何服務(wù)器。

    如果你沒有使用鏈接模式、沒有或不想使用rsync或者想用一種更容易的解決方案,請(qǐng)?zhí)^這一節(jié)中的過程并且在pg_upgrade完成并且新的主集簇開始運(yùn)行后重建后備服務(wù)器。

    1. 在后備服務(wù)器上安裝新的 PostgreSQL 二進(jìn)制文件

      確保新的二進(jìn)制和支持文件被安裝在所有后備服務(wù)器上。

    2. 確保存在新的后備機(jī)數(shù)據(jù)目錄

      確保新的后備機(jī)數(shù)據(jù)目錄存在或者為空。如果 運(yùn)行過initdb,請(qǐng)刪除后備服務(wù)器的新數(shù)據(jù)目錄。

    3. 安裝自定義共享對(duì)象文件

      在新的后備機(jī)上安裝和新的主集簇中相同的自定義共享對(duì)象文件。

    4. 停止后備服務(wù)器

      如果后備服務(wù)器仍在運(yùn)行,現(xiàn)在使用上述的指令停止它們。

    5. 保存配置文件

      從舊后備機(jī)的配置目錄保存任何需要保留的配置文件,例如 postgresql.conf(以及它包含的任何文件)、 postgresql.auto.conf、pg_hba.conf, 因?yàn)檫@些文件在下一步中會(huì)被重寫或者移除。

    6. 運(yùn)行rsync

      在使用鏈接模式時(shí),后備服務(wù)器可以使用rsync快速升級(jí)。為了實(shí)現(xiàn)這一點(diǎn),在服務(wù)器上一個(gè)高于新舊數(shù)據(jù)庫集簇目錄的目錄中為每個(gè)后備服務(wù)器運(yùn)行這個(gè)命令:

      rsync --archive --delete --hard-links --size-only --no-inc-recursive old_cluster new_cluster remote_dir
      

      其中old_clusternew_cluster是相對(duì)于主服務(wù)器上的當(dāng)前目錄的,而remote_dir是后備服務(wù)器上高于新舊集簇目錄的一個(gè)目錄。在主服務(wù)器和后備服務(wù)器上指定目錄之下的目錄結(jié)構(gòu)必須匹配。指定遠(yuǎn)程目錄的詳細(xì)情況請(qǐng)參考rsync的手冊(cè),例如:

      rsync --archive --delete --hard-links --size-only --no-inc-recursive /opt/PostgreSQL/9.5 \ /opt/PostgreSQL/9.6 standby.example.com:/opt/PostgreSQL

      可以使用rsync--dry-run選項(xiàng)驗(yàn)證該命令將做的事情。雖然在主服務(wù)器上必須為至少一臺(tái)后備運(yùn)行rsync,可以在一臺(tái)已經(jīng)升級(jí)過的后備服務(wù)器上運(yùn)行rsync來升級(jí)其他的后備服務(wù)器,只要已升級(jí)的后備服務(wù)器還沒有被啟動(dòng)。

      這個(gè)命令所做的事情是記錄由pg_upgrade的鏈接模式創(chuàng)建的鏈接,它們連接主服務(wù)器上新舊集簇中的文件。該命令接下來在后備服務(wù)器的舊集簇中尋找匹配的文件并且為它們?cè)谠摵髠涞男录刂袆?chuàng)建鏈接。主服務(wù)器上沒有被鏈接的文件會(huì)被從主服務(wù)器拷貝到后備服務(wù)器(通常都很?。?。這提供了快速的后備服務(wù)器升級(jí)。不幸地是,rsync會(huì)不必要地拷貝與臨時(shí)表和不做日志表相關(guān)的文件,因?yàn)橥ǔT诤髠浞?wù)器上不存在這些文件。

      如果有表空間,你將需要為每個(gè)表空間目錄運(yùn)行一個(gè)類似的rsync命令,例如:

      rsync --archive --delete --hard-links --size-only --no-inc-recursive /vol1/pg_tblsp/PG_9.5_201510051 \
            /vol1/pg_tblsp/PG_9.6_201608131 standby.example.com:/vol1/pg_tblsp
      

      如果你已經(jīng)把pg_wal放在數(shù)據(jù)目錄外面,也必須在那些目錄上運(yùn)行rsync。

    7. 配置流復(fù)制和日志傳送后備服務(wù)器

      為日志傳送配置服務(wù)器(不需要運(yùn)行pg_start_backup() 以及pg_stop_backup()或者做文件系統(tǒng)備份,因?yàn)閺膶贆C(jī) 仍在與主機(jī)同步)。

  11. 恢復(fù) pg_hba.conf

    如果你修改了pg_hba.conf,則要將其恢復(fù)到原始的設(shè)置。 也可能需要調(diào)整新集簇中的其他配置文件來匹配舊集簇,例如 postgresql.conf(以及它包含的任何文件)和 postgresql.auto.conf。

  12. 啟動(dòng)新服務(wù)器

    現(xiàn)在可以安全地啟動(dòng)新的服務(wù)器,并且可以接著啟動(dòng)任何 rsync過的后備服務(wù)器。

  13. 升級(jí)后處理

    如果需要做任何升級(jí)后處理,pg_upgrade 將在完成后發(fā)出警告。它也將 生成必須由管理員運(yùn)行的腳本文件。這些腳本文件將連接到每一個(gè)需要做 升級(jí)后處理的數(shù)據(jù)庫。每一個(gè)腳本應(yīng)該這樣運(yùn)行:

    psql --username=postgres --file=script.sql postgres
    

    這些腳本可以以任何順序運(yùn)行并且在運(yùn)行之后立即刪除。

    小心

    通常在重建腳本運(yùn)行完成之前訪問重建腳本中引用的表是不安全的,這樣做 可能會(huì)得到不正確的結(jié)果或者很差的性能。沒有在重建腳本中引用的表可以 隨時(shí)被訪問。

  14. 統(tǒng)計(jì)信息

    由于pg_upgrade并未傳輸優(yōu)化器統(tǒng)計(jì)信息,在升級(jí)的尾聲 你將被指示運(yùn)行一個(gè)命令來生成這些信息。你可能需要設(shè)置連接參數(shù)來匹配你 的新集簇。

  15. 刪除舊集簇

    一旦你對(duì)升級(jí)表示滿意,你就可以通過運(yùn)行 pg_upgrade完成時(shí)提到的腳本來刪除舊集簇的 數(shù)據(jù)目錄(如果在舊數(shù)據(jù)目錄中有用戶定義的表空間就不可能實(shí)現(xiàn)自動(dòng)刪除)。 你也可以刪除舊安裝目錄(例如bin、share)。

  16. 恢復(fù)到舊集簇

    在運(yùn)行pg_upgrade之后,如果你希望恢復(fù)到 舊集簇,有幾個(gè)選項(xiàng):

    • 如果使用了 --check 選項(xiàng), 則舊集群沒有被修改;它可以被重新啟動(dòng)。

    • 如果 --link 選項(xiàng) 沒有被使用, 舊集群沒有被修改;它可以被重新啟動(dòng)。

    • 如果使用了--link 選項(xiàng), 數(shù)據(jù)文件可能在新舊群集之間共享:

      • 如果pg_upgrade在鏈接啟動(dòng)之前中止,舊群集沒有被修改,它可以重新啟動(dòng)。

      • 如果你沒有啟動(dòng)新集群,舊集群沒有被修改,當(dāng)鏈接啟動(dòng)時(shí),一個(gè).old后綴會(huì)附加到$PGDATA/global/pg_control。 如果要重用舊集群,從$PGDATA/global/pg_control移除.old后綴;你就可以重啟舊集群。

      • 如果你已經(jīng)啟動(dòng)新群集,它已經(jīng)寫入了共享文件,并且使用舊群集會(huì)不安全。這種情況下,需要從備份中還原舊群集。

注解

pg_upgrade創(chuàng)建不同的工作文件,如模式轉(zhuǎn)儲(chǔ),在當(dāng)前工作目錄中。為了安全,請(qǐng)確保該目錄不可被任何其他用戶讀取或者寫入。

pg_upgrade在新舊數(shù)據(jù)目錄中啟動(dòng)短期的postmasters。臨時(shí) Unix 套接字文件用于與這些postmasters通信,默認(rèn)情況下,在當(dāng)前工作目錄中進(jìn)行。 在某些情況下,當(dāng)前目錄的路徑名稱可能太長(zhǎng),無法成為有效的套接字名稱。這種情況下你可以使用-s選項(xiàng)將套接字文件放在某些具有較短路徑名稱的目錄中。 為了安全原因,請(qǐng)確保該目錄不可被任何其他用戶讀取或者寫入。(這在 Windows 上不受支持。)

如果失敗、重建和重索引會(huì)影響你的安裝,pg_upgrade 將會(huì)報(bào)告這些情況。用來重建表和索引的升級(jí)后腳本將會(huì)自動(dòng)被建立。 如果你正在嘗試自動(dòng)升級(jí)很多集簇,你應(yīng)該發(fā)現(xiàn)具有相同數(shù)據(jù)庫模式的集簇 對(duì)所有集簇升級(jí)都要求同樣的升級(jí)后步驟,這是因?yàn)樯?jí)后步驟是基于數(shù)據(jù) 庫模式而不是用戶數(shù)據(jù)。

對(duì)于部署測(cè)試,創(chuàng)建一個(gè)只有模式的舊集簇副本,在其中插入假數(shù)據(jù)并且升級(jí)。

pg_upgrade不支持包含使用這些reg* OID-引用 系統(tǒng)數(shù)據(jù)類型的表列的數(shù)據(jù)庫的升級(jí):

regcollation
regconfig
regdictionary
regnamespace
regoper
regoperator
regproc
regprocedure

(regclass, regrole, and regtype can be upgraded.)

如果你在升級(jí)一個(gè)PostgreSQL 9.2 之前的集簇,并且 它使用一個(gè)只有配置文件的目錄,你必須向pg_upgrade 傳遞真正的數(shù)據(jù)目錄位置,并且把配置目錄位置傳遞給服務(wù)器,例如 -d /real-data-directory -o '-D /configuration-directory'。

如果正在使用的一個(gè) 9.1 之前的舊服務(wù)器用的是一個(gè)非默認(rèn)Unix 域套接字目錄 或者使用的默認(rèn)值不同于新集簇的默認(rèn)值,請(qǐng)把PGHOST設(shè)置為 指向舊服務(wù)器的套接字位置(這與 Windows 無關(guān))。

如果你想要使用鏈接模式并且你不想讓你的舊集簇在新集簇啟動(dòng)時(shí)被修改,考慮使用克隆模式。 如果(克隆模式)不可用,可以復(fù)制一份舊集簇并且在副本上以鏈接模式進(jìn)行升級(jí)。要?jiǎng)?chuàng)建舊集簇的一 份合法拷貝,可以在服務(wù)器運(yùn)行時(shí)使用rsync創(chuàng)建舊集簇的 一份臟拷貝,然后關(guān)閉舊服務(wù)器并且再次運(yùn)行rsync --checksum 把更改更新到該拷貝以讓其一致(--checksum是必要的,因?yàn)? rsync在判斷文件修改時(shí)間的更改時(shí)的精度只能到秒級(jí))。如 第 25.3.3 節(jié)中所述,你可能想要排除 一些文件,例如postmaster.pid。如果你的文件系統(tǒng)支持文 件系統(tǒng)快照或者 copy-on-write 文件副本,你可以使用它們來創(chuàng)建舊集簇和 表空間的一個(gè)備份,不過快照和副本必須被同時(shí)創(chuàng)建或者在數(shù)據(jù)庫服務(wù)器關(guān)閉 期間被創(chuàng)建。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)