綠色(sè)資源網:您(nín)身邊最放心的安全下載站! 最新軟件|熱(rè)門排行|軟件分類|軟件專題|廠商(shāng)大全

綠(lǜ)色(sè)資源網

技術(shù)教程
您的位(wèi)置:首頁數據庫類SQL Server → SQL Server 2012 自帶數據庫維護工具使用技巧

SQL Server 2012 自帶數據庫維護工具(jù)使用技巧

我要評論 2012/09/27 20:30:27 來源:綠(lǜ)色資源網 編輯:www.ynaad.com [大(dà) ] 評(píng)論:0 點擊:378次

2012年第(dì)二季度(dù),SQL Server 2012就(jiù)已經發布。作為(wéi)普通的開(kāi)發者,並沒有太多(duō)的熱情(qíng)去追隨這些潮流的(de)技術(shù),經過短暫的嚐(cháng)鮮,果斷決(jué)定放在一邊,不(bú)予(yǔ)以(yǐ)理會。從SQL Server 2000起,就一直把SQL Server作為首選的項目數據(jù)庫平台。隨著SQL Server 2005, 2008, 2008 R2, 2012等(děng)係列版本的(de)陸續發布,麵臨(lín)的問題也越來越多。遇到最多的一個問題是,SQL Server不同版本間的數(shù)據庫(kù)轉化問題。

舉例說明(míng),在幾百個客戶中,至今仍然有使用SQL Server 2000的,以我的經驗,這個版本的SQL Server還有相當多的客戶在用。2006年之後的客戶,從開(kāi)始上項目就推薦用SQL Server 2005,所以(yǐ)沿襲過來,他們一直是這個版本的。到了2009年,新的客戶又被推薦使(shǐ)用SQL Server 2008或(huò)是SQL Server 2008 R2,從理解上來說,SQL Server 2008 R2相當於SQL Server 2010。再加上這(zhè)幾個版本之(zhī)間有補丁包,SQL Server的版本又(yòu)增加了好幾個,理(lǐ)論上推薦客戶升級到最新的補丁包,也有客戶因穩定性的原因,拒絕升級。於是乎,就為一個SQL Server,就(jiù)有好多個版本。作為開發者,一般隻有裝最新的SQL Server,以便於防止(zhǐ)在查找客戶問題時,發生數據庫版本不兼容,無(wú)法(fǎ)還原(yuán)數據(jù)庫的錯誤。然而,最新的SQL Server 2012,不再(zài)支持SQL Server 2000的(de)備份文件,這不是個好消息。

對於下麵的這個錯誤,在客戶比較(jiào)多的情況下,經常會遇到。比如要拿客戶的數據(jù)庫回來查找問題,這個問題經常出現。如果耐(nài)心不好,就幹脆裝個最新的SQL Server,如果(guǒ)不想這樣(yàng),下麵提供的幾(jǐ)種方法,也許對你有所幫助。

SQL Server Import/Export

SQL Server自帶的(de)導入導出向導,大部分情況下有效。我推(tuī)薦的步驟是先創(chuàng)建目標(biāo)數據庫的腳本,讓(ràng)SQL Server隻傳輸數據(jù),而不是既創建表,又傳輸數據(jù),以減(jiǎn)少(shǎo)一些很奇怪的錯誤。

這個工具用的不多,有(yǒu)各種奇怪的問題,沒有積累多的經驗。

SQL Object Level Recovery Native

RedGate公司SQL Toolbet係列組件的一個,可以從SQL Server的備份文件(jiàn)中生成帶數據的SQL語句,在目標數據庫中直接執行即可。這種方法的成功率很高,簡單(dān)的帶數據的(de)SQL INSERT語(yǔ)句,在任何版本的SQL Server中,都可(kě)以(yǐ)很正確的插入數據。

點擊View Recovery Script,可以查看它生成的SQL 腳本,直接把備份數據文件轉化為SQL語句,相當方便(biàn)。

目前支持SQL Server 2008 R2的備份集,可以滿足絕大部分客戶的應(yīng)用。

SQL Query  Generator

公司(sī)的工具庫裏麵的一個工(gōng)具,一般是給客戶維護(hù)(support)人員用,用於快速導(dǎo)入導出數據。

以Northwind數據庫為例子,可以馬(mǎ)上生成這個表的INSERT語句,保存到剪貼板中,例子語句如下所示

INSERT INTO [Employees] ([EmployeeID],[LastName],[FirstName],[Title],[TitleOfCourtesy],[BirthDate],[HireDate],[Address],[City],[Region],[PostalCode],[Country],[Homephones],[Extension],[Photo],[Notes],[ReportsTo],[PhotoPath])
VALUES(9, N'Dodsworth', N'Anne', N'Sales Representative', N'Ms.', '1966-1-27 0:0:0.0', '1994-11-15 0:0:0.0', N'7 Houndstooth Rd.', N'London', N'', N'WG2 7LT', N'UK', N'(71) 555-4444', N'452', N'System.Byte[]', N'Anne has a BA degree in English from St. Lawrence College.  She is fluent in French and German.', 5, N'http://accweb/emmployees/davolio.bmp')INSERT INTO [Employees] ([EmployeeID],[LastName],[FirstName],[Title],[TitleOfCourtesy],[BirthDate],[HireDate],[Address],[City],[Region],[PostalCode],[Country],[Homephones],[Extension],[Photo],[Notes],[ReportsTo],[PhotoPath])
VALUES(8, N'Callahan', N'Laura', N'Inside Sales Coordinator', N'Ms.', '1958-1-9 0:0:0.0', '1994-3-5 0:0:0.0', N'4726 - 11th Ave. N.E.', N'Seattle', N'WA', N'98105', N'USA', N'(206) 555-1189', N'2344', N'System.Byte[]', N'Laura received a BA in psychology from the University of Washington.  She has also completed a course in business French.  She reads and writes French.', 2, N'http://accweb/emmployees/davolio.bmp')

這樣,很方(fāng)便的搬動數(shù)據庫到另一個位置,簡單靈活。對於圖片數據,要單獨處理。對於有種子字段的列,要在導入前,開啟,語(yǔ)句如下所示

SET IDENTITY_INSERT dbo.ICMOVh OFF 
SET IDENTITY_INSERT dbo.ICMOVD ON

對於主從表(biǎo)數據,先導入(rù)主表,再導入從表(biǎo)。刪(shān)除主從(cóng)表數據,則是(shì)先刪從表(biǎo),再刪主表。

LLBL Gen

作為ORM的基本(běn)特征,跨數據庫平台。你可以運用此特點(diǎn),從(cóng)一個數據庫中讀(dú)取,然後改(gǎi)變連接字符串,在另一(yī)個數據庫(kù)中保存,完成(chéng)數據庫的轉移工作。以銷售單為例(lì)子,讀取銷售單的(de)代碼,看起來是這樣的

public SalesOrderEntity GetSalesOrder(System.String RefNo, IPrefetchPath2 prefetchPath, ExcludeIncludeFieldsList fieldList)
{
            SalesOrderEntity _SalesOrder = new SalesOrderEntity(RefNo);
            using (DataAccessAdapterBase adapter = GetCompanyDataAccessAdapter())
            {
                bool found = adapter.FetchEntity(_SalesOrder, prefetchPath, null, fieldList);
                if (!found) throw new Foundation.Common.RecordNotFoundException("Invalid SalesOrder");
            }
            return _SalesOrder;
}

同時,保存銷售單(dān)的代碼,看起來是這樣的

public SalesOrderEntity SaveSalesOrder(SalesOrderEntity SalesOrder, EntityCollection entitiesToDelete, string seriesCode)
 {
            using (DataAccessAdapterBase adapter = GetCompanyDataAccessAdapter())
            {
                try
                {
                    adapter.StartTransaction(IsolationLevel.ReadCommitted, "SaveSalesOrder");
                    adapter.SaveEntity(SalesOrder, true, false);
                    adapter.Commit();
                }
                catch
                {
                    adapter.Rollback();
                    throw;
                }
            }
            return SalesOrder;
}

這些代碼均是由代碼生成器直接生成的。完成數據(jù)轉移的ORM代(dài)碼,看起來(lái)是這樣子的

string source = "Data Source=192.168.0.96;Initial Catalog=TS;User Id =sa ; Password =holiday;";
string destination = "Data Source=192.168.0.200;Initial Catalog=TS;User Id = sa ; Password = holiday;";
ClientProxyFactory.ConnectionString = source;            
ISalesOrderManager manager = ClientProxyFactory.CreateProxyInstance<ISalesOrderManager>();
SalesOrderEntity salesOrder = manager.GetSalesOrder(customerNo, null);
ClientProxyFactory.ConnectionString = destination;
manager.SaveSalesOrder(salesOrder);

就這樣幾句代碼,把銷售單數(shù)據從192.168.0.96的機器搬動到192.168..0.200的機器上。

更進一步的,這幾句代碼(mǎ)可以寫成一個泛型的方法(fǎ),傳入參數,即可達到批量搬動數據。

以我(wǒ)的理解和摸索,當前仍然是讓項目使用(yòng)主流的SQL Server 2005,搭配Express版本的SQL Server 2008, 2008 R2,這樣可以讀取高於SQL Server 2005的客戶數(shù)據庫,兼容於更(gèng)新的數據庫。為了在不同的版本的SQL Server之間互導數據,供您參考。

關(guān)鍵(jiàn)詞:SQL,數據庫

閱(yuè)讀本文後您有什(shí)麽感想? 已有 人給出評價!

  • 1 歡迎喜歡
  • 1 白癡
  • 1 拜托(tuō)
  • 1 哇
  • 1 加油
  • 1 鄙視(shì)
免费人欧美成又黄又爽的视频丨一本色道久久88综合日韩精品丨国产专区日韩精品欧美色丨午夜无遮挡男女啪啪视频丨国产欧美日韩综合精品一区二区丨亚洲精品无码不卡在线播HE丨亚洲精品国产精品国自产观看丨日韩国产高清av不卡