使用其他方法來匯入和匯出 SQL Server 資料 - Amazon Relational Database Service

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用其他方法來匯入和匯出 SQL Server 資料

接下來,您可以找到有關使用快照將 Microsoft SQL Server 資料匯入 Amazon RDS 的資訊。您還可以找到有關從執行 SQL Server 的 RDS 資料庫執行個體匯出快照的資訊。

只要您的案例有支援使用原生備份與還原功能,您即可輕鬆將資料移進和移出 Amazon RDS。如需更多詳細資訊,請參閱 使用原生備份和還原,匯入和匯出 SQL Server 資料庫

注意

Amazon RDS for Microsoft SQL Server 不支援將資料匯入 msdb 資料庫。

使用快照,將資料匯入 RDS for SQL Server

使用快照將資料匯入 SQL Server 資料庫執行個體
  1. 建立資料庫執行個體。如需更多詳細資訊,請參閱 建立 Amazon RDS 資料庫執行個體

  2. 防止應用程式存取目的地資料庫執行個體。

    如果在匯入資料時防止存取您的資料庫執行個體,資料傳輸會較快。此外,您不必擔心載入資料時,其他應用程式無法同時寫入資料庫執行個體而引起的衝突。如果發生問題而必須轉返到先前的資料庫快照,唯一失去的變更只是已匯入的資料。您可以在解決問題之後重新匯入此資料。

    如需有關控制存取資料庫執行個體的資訊,請參閱使用安全群組控制存取

  3. 建立目標資料庫的快照。

    如果目標資料庫中已填入資料,建議您先建立資料庫的快照,再匯入資料。如果資料匯入發生問題,或您想要捨棄變更,您可以使用快照將資料庫還原到先前的狀態。如需資料庫快照的相關資訊,請參閱為單一可用區資料庫執行個體建立資料庫快照

    注意

    當您建立資料庫快照時,資料庫的 I/O 操作會在備份進行時暫停一會兒 (毫秒)。

  4. 在目標資料庫上停用自動備份。

    在目標資料庫執行個體上停用自動備份可提升您匯入資料時的效能,因為停用自動備份時,Amazon RDS 不會記錄交易。但有一些注意事項。需要有自動備份才能執行時間點復原。因此,您無法在匯入資料期間將資料庫還原至特定時間點。此外,還會清除資料庫執行個體上建立的任何自動備份,除非您選擇保留它們。

    選擇保留自動備份可幫助您避免資料意外刪除。Amazon RDS 也會儲存資料庫執行個體屬性以及各自動化備份,以利復原。使用此選項讓您可以在刪除後,還原備份保留期間刪除的特定時間資料庫執行個體。自動備份會在指定備份時段結束時自動刪除,就和它們在作用中資料庫執行個體一樣。

    您也可以使用先前的快照來復原資料庫,您已建立的任何快照仍然可用。如需自動備份的相關資訊,請參閱 備份簡介

  5. 停用外部索引鍵限制 (如適用)。

    如果需要停用外部索引鍵限制,您可以利用下列指令碼這樣做。

    --Disable foreign keys on all tables DECLARE @table_name SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables; OPEN table_cursor; FETCH NEXT FROM table_cursor INTO @table_name; WHILE @@FETCH_STATUS = 0 BEGIN SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' NOCHECK CONSTRAINT ALL'; EXEC (@cmd); FETCH NEXT FROM table_cursor INTO @table_name; END CLOSE table_cursor; DEALLOCATE table_cursor; GO
  6. 捨棄索引 (如適用)。

  7. 停用觸發條件 (如適用)。

    如果需要停用觸發條件,您可以利用下列指令碼這樣做。

    --Disable triggers on all tables DECLARE @enable BIT = 0; DECLARE @trigger SYSNAME; DECLARE @table SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name, table_object.name table_name FROM sysobjects trigger_object JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id WHERE trigger_object.type = 'TR'; OPEN trigger_cursor; FETCH NEXT FROM trigger_cursor INTO @trigger, @table; WHILE @@FETCH_STATUS = 0 BEGIN IF @enable = 1 SET @cmd = 'ENABLE '; ELSE SET @cmd = 'DISABLE '; SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' '; EXEC (@cmd); FETCH NEXT FROM trigger_cursor INTO @trigger, @table; END CLOSE trigger_cursor; DEALLOCATE trigger_cursor; GO
  8. 在來源 SQL Server 執行個體中,查詢您想要匯入到目的地資料庫執行個體的任何登入。

    SQL Server 將登入和密碼存放在 master 資料庫中。因為 Amazon RDS 不授權存取 master 資料庫,您無法直接將登入和密碼匯入目的地資料庫執行個體。反之,您必須查詢來源 SQL Server 執行個體上的 master 資料庫,以產生資料定義語言 (DDL) 檔案。此檔案應該包含您要新增至目的地資料庫執行個體的所有登入和密碼。此檔案還應該包含您要轉移的角色成員資格和許可。

    如需查詢 master 資料庫的相關資訊,請參閱 Microsoft 知識庫中的如何在 SQL Server 2005 和 SQL Server 2008 的執行個體之間移轉登入和密碼

    此指令碼會輸出另一個指令碼,供您在目的地資料庫執行個體上執行。知識庫文章中的指令碼有下列程式碼:

    p.type IN

    在出現 p.type 的每個地方,改用下列程式碼:

    p.type = 'S'
  9. 使用匯入資料中的方法來匯入資料。

  10. 授予應用程式存取目標資料庫執行個體的權利。

    資料匯入完成時,就可以授予您在匯入期間封鎖的那些應用程式存取資料庫執行個體的權利。如需有關控制存取資料庫執行個體的資訊,請參閱使用安全群組控制存取

  11. 在目標資料庫執行個體上啟用自動備份。

    如需自動備份的相關資訊,請參閱 備份簡介

  12. 啟用外部索引鍵限制。

    如果您先前已停用外部索引鍵限制,現在可以利用下列指令碼來啟用它們。

    --Enable foreign keys on all tables DECLARE @table_name SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE table_cursor CURSOR FOR SELECT name FROM sys.tables; OPEN table_cursor; FETCH NEXT FROM table_cursor INTO @table_name; WHILE @@FETCH_STATUS = 0 BEGIN SELECT @cmd = 'ALTER TABLE '+QUOTENAME(@table_name)+' CHECK CONSTRAINT ALL'; EXEC (@cmd); FETCH NEXT FROM table_cursor INTO @table_name; END CLOSE table_cursor; DEALLOCATE table_cursor;
  13. 啟用索引 (如適用)。

  14. 啟用觸發條件 (如適用)。

    如果您先前已停用觸發條件,現在可以利用下列指令碼來啟用它們。

    --Enable triggers on all tables DECLARE @enable BIT = 1; DECLARE @trigger SYSNAME; DECLARE @table SYSNAME; DECLARE @cmd NVARCHAR(MAX); DECLARE trigger_cursor CURSOR FOR SELECT trigger_object.name trigger_name, table_object.name table_name FROM sysobjects trigger_object JOIN sysobjects table_object ON trigger_object.parent_obj = table_object.id WHERE trigger_object.type = 'TR'; OPEN trigger_cursor; FETCH NEXT FROM trigger_cursor INTO @trigger, @table; WHILE @@FETCH_STATUS = 0 BEGIN IF @enable = 1 SET @cmd = 'ENABLE '; ELSE SET @cmd = 'DISABLE '; SET @cmd = @cmd + ' TRIGGER dbo.'+QUOTENAME(@trigger)+' ON dbo.'+QUOTENAME(@table)+' '; EXEC (@cmd); FETCH NEXT FROM trigger_cursor INTO @trigger, @table; END CLOSE trigger_cursor; DEALLOCATE trigger_cursor;

匯入資料

Microsoft SQL Server Management Studio 是所有 Microsoft SQL Server 版本 (Express Edition 除外) 都包含的圖形化 SQL Server 用戶端。您可以從 Microsoft 免費下載 SQL Server Management Studio Express。若要尋找此下載檔,請造訪 Microsoft 網站

注意

SQL Server Management Studio 只推出 Windows 應用程式版本。

SQL Server Management Studio 包含下列工具,您可用來將資料匯入 SQL Server 資料庫執行個體:

  • 產生和發佈指令碼精靈

  • 匯入和匯出精靈

  • 大量複製

產生和發佈指令碼精靈

「產生和發佈指令碼精靈」會建立指令碼,其中包含資料庫的結構描述、資料庫本身或兩者都有。您可以在本機 SQL Server 部署中產生資料庫的指令碼。然後,您可以執行指令碼,將其中包含的資訊傳輸至 Amazon RDS 資料庫執行個體。

注意

如果資料庫是 1 GiB 或更大,只產生資料庫結構描述的指令碼會更有效率。然後,您使用 SQL Server 的「匯入和匯出」精靈或大量複製功能來傳輸資料。

如需「產生和發佈指令碼精靈」的詳細資訊,請參閱此 Microsoft SQL Server 文件

在精靈中,請特別注意 Set Scripting Options (設定指令碼編寫選項) 頁面的進階選項,確保已選取您要讓指令碼包含的所有項目。例如,指令碼依預設不包含資料庫觸發條件。

產生並儲存指令碼之後,您可以使用 SQL Server Management Studio 來連接至資料庫執行個體,然後執行指令碼。

匯入和匯出精靈

「匯入和匯出精靈」會建立一個特殊 Integration Services 套件,可用來將本機 SQL Server 資料庫中的資料複製到目的地資料庫執行個體。此精靈可篩選要複製到目的地資料庫執行個體的資料表,甚至是資料表內的元組。

注意

「匯入和匯出精靈」很適合大型資料集,但從遠端匯出本機部署的資料時,可能不是最快的方法。若要使用更快的方法,請考慮採用 SQL Server 大量複製功能。

如需「匯入和匯出精靈」的詳細資訊,請參閱此 Microsoft SQL Server 文件

在精靈的 Choose a Destination (選擇目的地) 頁面上,執行下列動作:

  • Server Name (伺服器名稱) 中,輸入資料庫執行個體的端點名稱。

  • 對於伺服器驗證模式,請選擇 Use SQL Server Authentication (使用 SQL Server 驗證)

  • User name (使用者名稱)Password (密碼) 中,輸入您為資料庫執行個體所建立之主要使用者的登入資料。

大量複製

需要將來源資料庫中的資料複製到資料庫執行個體時,SQL Server 大量複製功能很有效率。大量複製可將您指定的資料寫入資料檔案,例如 ASCII 檔案。然後,您可以再次執行大量複製,將檔案的內容寫入目的地資料庫執行個體。

本節使用所有 SQL Server 版本都有的 bcp 公用程式。如需大量匯入和匯出操作的詳細資訊,請參閱此 Microsoft SQL Server 文件

注意

使用大量複製之前,您必須先將資料庫結構描述匯入目的地資料庫執行個體。本主題稍早描述的「產生和發佈指令碼精靈」是此用途的絕佳工具。

下列命令連接至本機 SQL Server 執行個體。然後在現有 SQL Server 部署的 C:\ 根目錄中,產生指定之資料表的 Tab 分隔檔。資料表以完整名稱指定,而文字檔案與所複製的資料表同名。

bcp dbname.schema_name.table_name out C:\table_name.txt -n -S localhost -U username -P password -b 10000

上述程式碼包含下列選項:

  • -n 指定大量複製使用要複製之資料的原生資料類型。

  • -S 指定 bcp 公用程式要連接的 SQL Server 執行個體。

  • -U 指定登入 SQL Server 執行個體的帳戶使用者名稱。

  • -P 指定 所指定之使用者的密碼。-U

  • -b 指定每一批匯入資料的列數。

注意

根據您的匯入情況而定,可能還有其他重要的參數。例如,您可能需要有關身分值的 -E 參數。如需詳細資訊,請參閱此 Microsoft SQL Server 文件中有關 bcp 公用程式命令列語法的完整描述。

例如,假設有一個使用預設結構描述 (store) 之名為 dbo 的資料庫包含名為 customers 的資料表。使用者帳戶 admin (密碼為 insecure) 會將 customers 資料表的 10,000 列複製到名為 customers.txt 的檔案。

bcp store.dbo.customers out C:\customers.txt -n -S localhost -U admin -P insecure -b 10000

產生資料檔案後,您可以使用類似的命令,將資料上傳至資料庫執行個體。事先,在目標資料庫執行個體上建立資料庫和結構描述。然後,使用 in 引數來指定輸入檔案,而不是使用 out 來指定輸出檔案。指定資料庫執行個體的端點,而不是使用 localhost 來指定本機 SQL Server 執行個體。如果您使用的連接埠不是 1433,則也需要指定連接埠。使用者名稱和密碼是資料庫執行個體的主要使用者和密碼。語法如下。

bcp dbname.schema_name.table_name in C:\table_name.txt -n -S endpoint,port -U master_user_name -P master_user_password -b 10000

接續上一個範例,假設主要使用者名稱是 admin,密碼是 insecure。資料庫執行個體的端點是 rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com,您使用的連接埠是 4080。命令如下所示。

bcp store.dbo.customers in C:\customers.txt -n -S rds.ckz2kqd4qsn1.us-east-1.rds.amazonaws.com,4080 -U admin -P insecure -b 10000
注意

指定此處所顯示提示以外的密碼,作為安全最佳實務。

從 RDS for SQL Server 匯出資料

您可以選擇下列其中一個選項,從 RDS for SQL Server 資料庫執行個體匯出資料:

SQL Server 匯入和匯出精靈

您可以使用「SQL Server 匯入和匯出」精靈,將 RDS for SQL Server 資料庫執行個體中的一或多個資料表、檢視或查詢,複製到另一個資料存放區。如果目標資料存放區不是 SQL Server,這是最佳選擇。如需詳細資訊,請參閱 SQL Server 文件中的 SQL Server 匯入和匯出精靈

「SQL Server 匯入和匯出」精靈隨附於 Microsoft SQL Server Management Studio。所有 Microsoft SQL Server 版本 (Express Edition 除外) 都包含此圖形化 SQL Server 用戶端。SQL Server Management Studio 只推出 Windows 應用程式版本。您可以從 Microsoft 免費下載 SQL Server Management Studio Express。若要尋找此下載檔,請造訪 Microsoft 網站

使用 SQL Server 匯入和匯出精靈來匯出資料
  1. 在 SQL Server Management Studio 中,連接至 RDS for SQL Server 資料庫執行個體。如需詳細作法,請參閱連接至執行 Microsoft SQL Server 資料庫引擎的資料庫執行個體

  2. Object Explorer (物件總管) 中,展開 Databases (資料庫),開啟來源資料庫的內容 (右鍵) 功能表,選擇 Tasks (任務),然後選擇 Export Data (匯出資料)。出現精靈。

  3. Choose a Data Source (選擇資料來源) 頁面上,執行下列動作:

    1. 對於 Data source (資料來源),請選擇 SQL Server Native Client 11.0

    2. 確認 Server name (伺服器名稱) 方塊顯示 RDS for SQL Server 資料庫執行個體的端點。

    3. 選取 Use SQL Server Authentication (使用 SQL Server 驗證)。在 User name (使用者名稱) 和 Password (密碼) 中,輸入資料庫執行個體的主要使用者名稱和密碼。

    4. 確認 Database (資料庫) 方塊顯示您要從中匯出資料的資料庫。

    5. 選擇 Next (下一步)

  4. Choose a Destination (選擇目的地) 頁面上,執行下列動作:

    1. 對於 Destination (目的地),請選擇 SQL Server Native Client 11.0

      注意

      還有其他目標資料來源可用。其中包括 .NET Framework 資料提供者、OLE DB 提供者、SQL Server Native Client 提供者、ADO.NET 提供者、Microsoft Office Excel、Microsoft Office Access 及「一般檔案」來源。如果您選擇以其中一個資料來源為目標,請略過步驟 4 的其餘部分。關於接下來需提供的連線資訊的詳情,請參閱 SQL Server 文件中的選擇目的地

    2. Server name (伺服器名稱) 中,輸入目標 SQL Server 資料庫執行個體的伺服器名稱。

    3. 選擇適當的驗證類型。視需要輸入使用者名稱和密碼。

    4. Database (資料庫) 中,選擇目標資料庫的名稱,或選擇 New (新增) 來建立新資料庫,以包含所匯出的資料。

      如果您選擇 New (新增),請參閱 SQL Server 文件中的建立資料庫,以詳細了解需要提供的資料庫詳細資訊。

    5. 選擇 Next (下一步)

  5. Table Copy or Query (資料表複製或查詢) 頁面上,選擇 Copy data from one or more tables or views (從一個或多個資料表或檢視複製資料)Write a query to specify the data to transfer (寫入查詢來指定要傳輸的資料)。選擇 Next (下一步)

  6. 如果您選擇 Write a query to specify the data to transfer (寫入查詢來指定要傳輸的資料),您會看到 Provide a Source Query (提供來源查詢) 頁面。在 SQL 查詢中輸入或貼上,然後選擇 Parse (下一步) 來進行確認。確認查詢有效後,選擇 Next (下一步)

  7. Select Source Tables and Views (選取來源資料表和檢視) 頁面上,執行下列動作:

    1. 選取您要匯出的資料表和檢視,或確認已選取您提供的查詢。

    2. 選擇 Edit Mappings (編輯映射),並指定資料庫和資料行映射資訊。如需詳細資訊,請參閱 SQL Server 文件中的資料行映射

    3. (選用) 如需預覽要匯出的資料,請選取資料表、檢視或查詢,然後選擇 Preview (預覽)

    4. 選擇 Next (下一步)

  8. Run Package (執行封裝) 頁面上,確認已選取 Run immediately (立即執行)。選擇 Next (下一步)

  9. Complete the Wizard (完成精靈) 頁面上,確認資料匯出詳細資訊如您所預期。選擇 Finish (完成)。

  10. The execution was successful (已執行成功) 頁面上,選擇 Close (關閉)

SQL Server 產生和發佈指令碼精靈及 bcp 公用程式

您可以使用「SQL Server 產生和發佈指令碼精靈」來為整個資料庫或只針對選取的物件建立指令碼。您可以在目標 SQL Server 資料庫執行個體上執行這些指令碼,以重新建立指令碼物件。然後,您可以使用 bcp 公用程式,將所選取之物件的資料大量匯出到目標資料庫執行個體。如果您要在兩個 SQL Server 資料庫執行個體之間移動整個資料庫 (包括資料表以外的物件) 或大量資料,這是最佳選擇。如需 bcp 命令列語法的完整描述,請參閱 Microsoft SQL Server 文件中的 bcp 公用程式

「SQL Server 產生和發佈指令碼」精靈隨附於 Microsoft SQL Server Management Studio。所有 Microsoft SQL Server 版本 (Express Edition 除外) 都包含此圖形化 SQL Server 用戶端。SQL Server Management Studio 只推出 Windows 應用程式版本。您可以從 Microsoft 免費下載 SQL Server Management Studio Express。

使用 SQL Server 產生和發佈指令碼精靈及 bcp 公用程式來匯出資料
  1. 在 SQL Server Management Studio 中,連接至 RDS for SQL Server 資料庫執行個體。如需詳細作法,請參閱連接至執行 Microsoft SQL Server 資料庫引擎的資料庫執行個體

  2. Object Explorer (物件總管) 中,展開 Databases (資料庫) 節點,選取您要編寫指令碼的資料庫。

  3. 遵循 SQL Server 文件的產生和發佈指令碼精靈中的說明來建立指令碼檔案。

  4. 在 SQL Server Management Studio 中,連接至目標 SQL Server 資料庫執行個體。

  5. Object Explorer (物件總管) 中選取目標 SQL Server 資料庫執行個體後,在 File (檔案) 選單上選擇 Open (開啟),選擇 File (檔案),然後開啟指令碼檔案。

  6. 如果您已產生整個資料庫的指令碼,請檢閱指令碼中的 CREATE DATABASE 陳述式。確定資料庫是按照您要的位置和參數建立。如需詳細資訊,請參閱 SQL Server 文件中的 CREATE DATABASE

  7. 如果您在指令碼中建立資料庫使用者,請檢查那些使用者的伺服器登入是否存在於目標資料庫執行個體上。如果不是,請建立那些使用者的登入;否則,用於建立資料庫使用者的指令碼命令會失敗。如需詳細資訊,請參閱 SQL Server 文件中的建立登入

  8. 在「SQL 編輯器」功能表上選擇 !Execute,以執行指令碼檔案和建立資料庫物件。指令碼完成時,確認所有資料庫物件都如預期地存在。

  9. 使用 bcp 公用程式將 RDS for SQL Server 資料庫執行個體中的資料匯出到檔案。開啓命令提示並輸入下列命令。

    bcp database_name.schema_name.table_name out data_file -n -S aws_rds_sql_endpoint -U username -P password

    上述程式碼包含下列選項:

    • table_name 是您在目標資料庫中已重新建立,而現在想要將資料填入該資料表的其中一個資料表名稱。

    • data_file 是準備建立之資料檔案的完整路徑和名稱。

    • -n 指定大量複製使用要複製之資料的原生資料類型。

    • -S 指定要從中匯出資料的 SQL Server 資料庫執行個體。

    • -U 指定連接至 SQL Server 資料庫執行個體時所使用的使用者名稱。

    • -P 指定 所指定之使用者的密碼。-U

    以下顯示命令範例 命令。

    bcp world.dbo.city out C:\Users\JohnDoe\city.dat -n -S sql-jdoe.1234abcd.us-west-2.rds.amazonaws.com,1433 -U JohnDoe -P ClearTextPassword

    重複此步驟,直到您要匯出的所有資料表都有資料檔案為止。

  10. 遵循 SQL Server 文件的大量匯入資料的基本方針中的指示,以準備目標資料庫執行個體來大量匯入資料。

  11. 考慮過 SQL Server 文件的關於大量匯入和大量匯出操作中所討論的效能和其他考量之後,再決定要使用的大量匯入方法。

  12. 使用 bcp 公用程式從您建立的資料檔案中大量匯入資料。若要這麼做,請根據您在步驟 11 所做的決定,遵循 SQL Server 文件的使用 bcp 公用程式匯入及匯出大量資料使用 BULK INSERT 或 OPENROWSET(BULK...) 匯入大量資料中的指示。