利用DAC(Data-tier Application)实现数据库结构迁移
從一個存在的庫,抽取其表結(jié)構(gòu),對象,權(quán)限等,再部署成一個不包含數(shù)據(jù)的”空庫“的方法有很多種。如自帶的Generate Scripts功能,自定義腳本提取創(chuàng)建腳本等。
在實際使用中,我更喜歡使用DAC的方式。特別是它能跟PowerShell結(jié)合使用。
什么是DAC,它能干什么?
????? 數(shù)據(jù)層應(yīng)用程序 (DAC) 可以簡化支持客戶端-服務(wù)器或多層應(yīng)用程序的數(shù)據(jù)層元素的開發(fā)、部署和管理。每個 DAC 都作為單個管理單元運行,貫穿于關(guān)聯(lián)應(yīng)用程序的開發(fā)、測試和生產(chǎn)生命周期。DAC 定義支持應(yīng)用程序所需的所有數(shù)據(jù)庫對象(如表和視圖)以及與數(shù)據(jù)庫關(guān)聯(lián)的實例對象(例如登錄名)。DAC 還包括用于定義 DAC 的部署先決條件的策略。??????
它能實現(xiàn)的功能很,官方說明:數(shù)據(jù)層應(yīng)用程序
?
下面簡單介紹一下利用DAC遷移數(shù)據(jù)結(jié)構(gòu)的步驟:
1. 創(chuàng)建測試庫和登錄。然后提取庫為DAC包,這個過程有向?qū)?#xff0c;很簡單,基本一路Next。
use master go create database DAC_Test go create login DAC_User with password='P@ssword123' gouse DAC_Test go select * into tb1 from sys.objects select * into tb2 from sys.objects go create user DAC_User for login DAC_User exec sp_addrolemember 'db_owner','DAC_User' go
2. Application name需要注意,后面會用到。
3. 提取DAC并不是所有對象都受支持,支持類型限制在BOL中有說明。我曾經(jīng)就遇到過數(shù)據(jù)庫有Synonyms不能提取,只能先刪除之,再提取。
??? 然后一路Next,得到一個生成的DAC包。
4. 在目標實例上創(chuàng)建一個空庫,不一定要同名。首先將這個庫注冊成DAC。
5. 注冊的Application name要與2.中的一致。
6. 注冊成功后, 在Management—>Data-tier Application會看到此DAC。
7. 將前面生成DAC包,拷到一個目標實例上能訪問的位置。然后使用Upgrade Data-tier Application將這個包導(dǎo)入。一路Next.
8. 完成后,源庫中的各種對象都有了。有一點要注意,目標實例被導(dǎo)入的Login是被禁用的,并且在目標庫上對應(yīng)User的Role,并不是原來的db_owner,而是public。
需要使用則要手動設(shè)定之。
?
總結(jié)
1. DAC是很強大的一個工具,還有很多功能。
2. SQL Server要是能提供Backup Database ….WITH NO_DATA,也就不會有這么多事了。
轉(zhuǎn)載于:https://www.cnblogs.com/Joe-T/p/3993095.html
總結(jié)
以上是生活随笔為你收集整理的利用DAC(Data-tier Application)实现数据库结构迁移的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库字段设置为非空默认值
- 下一篇: 提高SQL语句的性能