數據庫SQL Server DAC 導入導出數據到SQL Azure問題

對Export data-tier application報錯的處理 Error:SQL71564

clip_image002clip_image002[4]

這個問題是數據庫中一些對象如MS_Description,MS_DiagramPane1不支持DAC Export Data-tier Appliation 的操作。

詳見:DAC Support For SQL Server Objects and Versions http://msdn.microsoft.com/en-us/library/ee210549.aspx 這裏有詳細的說明。

遇到這個種問題一般的採用減輕問題的解決辦法(Mitigation)

1. 首先選用支持DAC Extract Data-tier Application的數據庫版本,如SQL Server 2008 R2 SP2或者更高版本。導出dacpac文件,這個文件包含了數據庫結構,metadata和schema

2. 因爲有的對象不支持DAC Export Data-tier Application,即導出bacpac文件。所以我們不能採取這種方式,我們採取微軟提供的工具bcp.exe

3. 使用BCP.exe工具導出導入數據

  1. 下載並安裝Microsoft® ODBC Driver 11 for SQL Server® - Windows http://www.microsoft.com/zh-cn/download/details.aspx?id=36434
  2. 下載並安裝 Microsoft Command Line Utilities 11 for SQL Server http://www.microsoft.com/zh-CN/download/details.aspx?id=36433
  3. 使用BCP工具從SQL Server導出數據

參考用例:C:\Users\ericwen>bcp ZcooTongDB.dbo.ZCT_SuperAdmins out "D:\DAC Packages\ ZcooTongDB.bacpac" -U sa -P *****

  1. 使用BCP工具導入數據到SQL Azure

參考用例:C:\Users\ericwen>bcp ZcooTongDB1.dbo.ZCT_SuperAdmins in "D:\DAC Packages\ ZcooTongDB.bacpac" -U ericwen@[雲數據庫名稱] -P ****** -S "[雲數據庫名稱].database.windows.net"

bcp 實用工具:http://technet.microsoft.com/zh-cn/library/ms162802.aspx

在操作過程中可以用默認的選項,直接回車。如圖:

clip_image001

如何實現批量導出數據呢,可以再SSMS運行以下腳本

SELECT
      'bcp '
    + SCHEMA_NAME(schema_id) + '.' + name
    + ' out '
    + ' D:\local_backup_directory\' + SCHEMA_NAME(schema_id) + '.' + name + '.txt'
    + ' -c '
    + ' -S servername.database.windows.net '
    + ' -d database_name '
    + ' -U username '
    + ' -P password'
FROM sys.tables;

將查詢結果保存到bcpcmd.bat文件中,然後用cmd運行即可

4. 清除數據庫中的Table、View、Column中的不支持DAC的對象(不支持Export 到 bacpac文件的對象)

在SSMS裏運行

--tables
 
select 'EXEC sp_dropextendedproperty
@name = ''MS_Description''
,@level0type = ''schema''
,@level0name = ' + object_schema_name(extended_properties.major_id) + '
,@level1type = ''table''
,@level1name = [' + object_name(extended_properties.major_id)+']'
from sys.extended_properties
where extended_properties.class_desc = 'OBJECT_OR_COLUMN'
and extended_properties.minor_id = 0
and extended_properties.name = 'MS_Description'
 

--views
 
select 'EXEC sp_dropextendedproperty
@name = '''+extended_properties.name+'''
,@level0type = ''schema''
,@level0name = ' + object_schema_name(extended_properties.major_id) + '
,@level1type = ''view''
,@level1name = [' + object_name(extended_properties.major_id)+']'
from sys.extended_properties
where extended_properties.class_desc = 'OBJECT_OR_COLUMN'
and extended_properties.minor_id = 0
and (extended_properties.name = 'MS_DiagramPane1' or extended_properties.name = 'MS_DiagramPaneCount')

--columns
 
select 'EXEC sp_dropextendedproperty
@name = ''MS_Description''
,@level0type = ''schema''
,@level0name = ' + object_schema_name(extended_properties.major_id) + '
,@level1type = ''table''
,@level1name = ' + object_name(extended_properties.major_id) + '
,@level2type = ''column''
,@level2name = [' + columns.name+']'
from sys.extended_properties
join sys.columns
on columns.object_id = extended_properties.major_id
and columns.column_id = extended_properties.minor_id
where extended_properties.class_desc = 'OBJECT_OR_COLUMN'
and extended_properties.minor_id > 0
and extended_properties.name = 'MS_Description'

將運行後的結果再到SSMS裏運行就可以移除那些不支持的對象了,這樣再進行Export操作就可以成功。

DAC相關文檔:http://msdn.microsoft.com/en-us/library/ee210546.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章