首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

使用 SQL Server Publishing Wizard 遷移數據到遠程服務器 (上):導出腳本生成與所有者問題分析

     編輯:MySQL 資料庫相關知識

SQL Server 數據庫發布精靈遷移實戰 (一):工具獲取、導出向導操作、對象類型選擇、所有者差異導致遷移失敗根因分析

網站遷移至 LunarPages 等不提供遠程數據庫連接的虛擬主機時,無法使用 DTS/備份還原,需借助 SQL Server Database Publishing Wizard 生成 T-SQL 腳本遷移。本文詳細記錄工具下載、導出向導全流程、對象類型選擇策略、以及「所有者不一致」導致遷移失敗的核心根因與解決思路。

一、工具獲取與安裝

  • 下載地址:Microsoft Download Center (SQL Server 2008 版本,兼容 2005/2008/R2)
  • 安裝後在 SSMS (SQL Server Management Studio) Tools 菜單中出現 SQL Server Database Publishing Wizard...

二、導出向導完整步驟

  1. 啟動向導: Tools → SQL Server Database Publishing Wizard
  2. 選擇數據庫: 連接本地實例,選中目標數據庫(如 bf4190_db)
  3. 選擇對象類型: 勾選 Tables、Stored Procedures、Views。不勾選 Users/Roles/Schemas——目標服務器賬戶不同,遷移用戶會導致權限錯誤。
  4. 輸出選項: 選擇「Script to file」,生成 .sql 文件(後續改名為 .txt 部署)。
  5. 完成導出: 獲得完整 T-SQL 腳本,含 CREATE TABLE、INSERT、CREATE PROCEDURE、CREATE VIEW 等語句。

三、所有者差異問題深度分析(核心難點)

現象: 導出腳本中表創建語句存在兩種形式:

-- 形式 1:顯式 dbo 架構
CREATE TABLE [dbo].[ads] ( ... )

-- 形式 2:無架構前綴(隱式當前用戶架構)
CREATE TABLE [ads] ( ... )

根因: 開發時建表語句寫法不同導致:

  • 寫法 A:CREATE TABLE [dbo].[ads] ... → 顯式指定 dbo 架構
  • 寫法 B:CREATE TABLE [ads] ... → 隱式使用當前用戶默認架構(原服務商賬戶 bf419)

遷移後果: 目標服務器賬戶為 xxxx,形式 2 的表會嘗試創建在 [xxxx].[ads],而形式 1 創建在 [dbo].[ads]。若應用代碼查詢 dbo.ads,形式 2 的表將「找不到」;若應用無架構前綴,則訪問 xxxx.ads,形式 1 的表又「找不到」。**架構不一致導致應用層查詢失敗**。

四、解決方案:統一所有者為 dbo

原則: dbo 為數據庫內建擁有者,任何映射為 db_owner 角色的用戶均隱含 dbo 權限,跨服務器、跨賬戶**完全通用**。

操作: 用文本編輯器 (Notepad/EditPlus/VS Code) 打開導出腳本,執行全局替換:

查找:[原賬戶名].     (如 [bf419].)
替換:[dbo].

同時檢查無架構前綴的表,建議統一添加 [dbo]. 前綴(或在部署腳本開頭加 SETUSER 'dbo' / EXECUTE AS USER='dbo',但顯式前綴最穩健)。

五、下篇預告

下篇將講解:腳本重命名為 .txt 繞過主機限制、FTP 上傳、編寫 ASP.NET 部署頁面 (runsql.aspx) 遠程流式讀取並按 GO 批次執行、連接字符串配置、超時處理、異常捕獲、資源釋放、部署驗證與安全清理。

六、現代替代方案補充

  • SqlPackage / DACPAC: `SqlPackage.exe /Action:Extract /SourceConnectionString:... /TargetFile:db.dacpac` → `SqlPackage.exe /Action:Publish /SourceFile:db.dacpac /TargetConnectionString:...` 官方推薦、增量同步、無腳本體積限制。
  • Azure Data Migration Service / AWS DMS: 雲原生異構/同構遷移、CDC 增量同步、任務監控。
  • bcp / BULK INSERT: 大量數據高性能導出導入,配合 CREATE TABLE 腳本分離結構與數據。

但對於無遠程連接、無雲服務的傳統虛擬主機環境,本文「Publishing Wizard + 腳本修正 + ASP.NET 部署」方案仍具備實戰參考價值。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved