SQL Server中對查詢結果隨機排序 答:對結果記錄隨機排序,或隨機返回X條記錄,可以通過在SELECT語句中使用RAND函數來實現。但是RAND函數在查詢中只生成一次,因此每一行都將得到相同的值。可以通過在ORDER BY子句中使用NEWID函數來對結果進行排序的方法來實現,代碼如下:
SELECT *
FROM Northwind..Orders
ORDER BY NEWID()
SELECT TOP 10 *
FROM Northwind..Orders
ORDER BY NEWID()
解決SQL Server 2000之日志傳送功能 當您進行SQL Server 2000日志傳送的實驗時,也許偶而會中斷設定過程。如果真是如此,那麼某些資料仍然會存入每台服務器的日志傳送資料表,並且影響到後續的日志傳送設定動作。為了保證這些剩余資料都會被清除,請確實刪除每台服務器msdb數據庫內日志傳送資料表之相關資料。 Error 14261: The specifIEd primary_server_name.primary_database_name ('N') already exists.
Error 14426: A log shipping monitor is already defined (...) 必須手動執行下面幾個存儲過程來刪除Log Shipping在數據庫中記錄的信息。
1、sp_delete_log_shipping_primary
刪除msdb.dbo.log_shipping_primary表中的Primary Server信息
2、sp_delete_log_shipping_plan
刪除Log Shipping計劃
3、sp_delete_log_shipping_secondary
刪除msdb.dbo.log_shipping_secondarIEs表中的Secondary Server信息
4、sp_remove_log_shipping_monitor
刪除Log Shipping監視從表msdb.dbo.log_shipping_monitor 如果正確設置了Log Shipping,但是沒有辦法正常執行,在SQL Server的日志中可以看到類似這個信息和界面:
Microsoft (R) SQLMaint Utility (Unicode), Version Logged on to SQL Server 'ZTAO-1' as 'ZTAO-1\Administrator' (trusted)
Starting maintenance plan 'LOG_Plan_9' on 2003-9-4 14:42:02
Backup can not be performed on database 'ERPLogShipping'. This sub task is ignored.
Deleting old text reports... 0 file(s) deleted.
End of maintenance plan 'LOG_Plan_9' on 2003-9-4 14:42:02
SQLMAINT.EXE Process Exit Code: 1 (Failed)
可能是你沒有正確設置數據庫的模式,完整模式。
三、Log文件存放路徑
在MSDN上看過一篇文章說,同一台電腦上再次設置Log Shipping時,不要使用相同的目錄存放Log文件。這個沒有考證過,只提一下,提醒大家!
數據庫考試簡介——微軟數據庫管理員 (MCDBA)
微軟認證數據庫管理員 (MCDBA) 可獲得如下權益(2000 年 1 月 1 日生效): 在取得認證的第一年內訂閱全年 TechNet 或 TechNet Plus 享有預零售價的 50% 的折扣。(實行細節可能會隨著您的所在地點有所變化,請查看您的 Welcome Kit。)
訂閱“微軟開發人員網絡”(MSDN?)在獲得認證後的一年內,MCDBA 可以獲得一年的 MSDN 訂閱折扣.(實行細節可能會隨著您的所在地點有所變化,請查看您的 Welcome Kit。)MSDN 專業版的折扣額為 200 美元,MSDN Universal(通用版)的折扣為 500 美元。
訂閱一年期 SQL Server Magazine。 SQL Server Magazine 是供 SQL Server 專家閱讀的首選資源。該雜志由業界的專家撰稿,包含了技術和實際技巧以及有關建議,是每位使用 SQL Server 人士的必備之物。通常全年的定價是 49.95 美元,對於 MCDBA 免費。
通過 安全的 MCP Web 站點 直接從微軟公司獲得技術和產品信息。
從部分公司獲得獨享的產品和服務折扣。現已通過認證的個人可以通過訪問 MCP 安全站點 ,並單擊“其他權益”來獲取有關的獨享折扣信息。獲得最高級認證的人員可以選擇“最高級權益”。
MCDBA 徽標、證書、成績單、皮夾卡、領帶夾向同事和客戶表明您的微軟認證專家(MCP)身份。在認證時可以從 MCP 安全 Web 站點 下載徽標和成績單的電子文件。 免費訪問 Microsoft Certified Professional Magazine Online (《微軟認證專家在線雜志》 -- 一份有關職業生涯及專業前景展望的雜志)。 Microsoft CertifIEd Professional Magazine Online Web 站點的安全內容包括本期雜志(只有 MCP 才能訪問),其他僅在線發行的內容和專欄,一個只對 MCP 開放的數據庫和與微軟和其他技術專家定期的在線技術討論。
加入 PASS(SQL Server 專業協會)時享有折扣。除了在其中扮演重要角色外(這是唯一由用戶主持並經過 Microsoft 批准的全球性 SQL Server 用戶組),該協會的成員還能夠獨享各種教育機會。PASS 還邀請 MCP 利用 PASS 的表決資格,只需 50 美元即可享受會員的所有權益(比正常價格低 100 美元)。 請訪問 MCP 安全 Web 站點 了解有關如何獲得此項權益的詳細信息。
MCDBA 要求
微軟認證數據庫管理員 (MCDBA) 報考人需要通過三門核心考試和一門選修考試,這些考試能夠有效和可靠地衡量實施和管理 Microsoft SQL Server數據庫的技術熟練和精通程度。
Microsoft 正在將 Microsoft Windows? XP 專業版和 Microsoft Windows? .NET Server 考試整合到 MCDBA 認證中。應繼續參與 Windows 2000 的培訓和認證,因為獲得的 Windows 2000 技能與 Windows XP 專業版和 Windows .NET Server 密切相關,並為後兩者提供重要的基礎。Windows 2000 系列的 MCDBA 不需要通過 Windows XP 專業版/Windows .NET Server 考試,即可繼續持有 MCDBA 認證。MCDBA 認證的 Windows 2000 考試和 Windows XP/Windows .Net Server 考試預計將繼續同時提供。
選擇下面的考試,獲得有關考試目標和准備資源的信息。針對 Windows XP/Windows .Net Server 的所有考試目前尚未推出。此外,這裡提供了指向對應資源的鏈接,這些資源可以幫助進行考試准備。
核心考試 - MCDBA 參考人需要通過一門 SQL Server 管理考試和一門 SQL Server 設計考試。此外,MCDBA 參考人還可以選擇通過一門 Windows 2000 或一門 Windows .Net Server 考試,以滿足核心要求。
SQL Server 考試
Exam 70-028 -Administering Microsoft SQL Server?7.0 Exam 70-228 -Installing, Configuring, and Administering Microsoft SQL Server? 2000 Enterprise Edition
Exam 70-029 -Designing and Implementing Databases with Microsoft SQL Server 7.0 Exam 70-229 -Designing and Implementing Databases with Microsoft SQL Server 2000 Enterprise Edition
Windows 2000 考試
Exam 70-215 -Installing, Configuring, and Administering Microsoft Windows 2000 Server
Windows XP/Windows .Net Server 考試
Exam 70-275-Installing, Configuring and Administering Microsoft Windows?.Net Server (2002 年推出)
Exam 70-215 的替代考試 - 通過了 Windows NT 4.0 Exam 70-067 和 70-068 的參考人可以選擇參加如下考試,代替上面的 Windows 2000 系列中的 Exam 70-215。
Exam 70-240* -Microsoft Windows 2000 Accelerated Exam for MCPs CertifIEd on Microsoft Windows NT? 4.0.(在 2001 年 12 月 31 日之前提供。有關詳細信息,請參閱 常見問題解答 。)
Exam 70-015 -Designing and Implementing Distributed Applications with Microsoft Visual C++ 6.0
Exam 70-019 -Designing and Implementing Data Warehouses with Microsoft SQL Server 7.0
Exam 70-155 -Designing and Implementing Distributed Applications with Microsoft Visual FoxPro? 6.0
Exam 70-175 -Designing and Implementing Distributed Applications with Microsoft Visual Basic? 6.0
Exam 70-216 -Implementing and Administering a Microsoft Windows 2000 Network Infrastructure
Exam 70-276-Implementing and Administering a Microsoft Windows .Net Server Network Infrastructure (2002 年推出)
Exam 70-216 的替代考試 - 通過了 Windows NT 4.0 Exam 70-067 和 70-068 的參考人可以選擇參加如下考試,代替上面的 Windows 2000 系列中的 Exam 70-216。
Exam 70-240* -Microsoft Windows 2000 Accelerated Exam for MCPs CertifIEd on Microsoft Windows NT? 4.0。(在 2001 年 12 月 31 日之前提供。有關詳細信息,請參閱 常見問題解答 。)
* 通過 Exam 70-240 的人員可將該考試的學分作為 MCDBA 系列中的核心考試和可選考試的學分。一般來說,在認證中,可用作核心考試或者可選考試計算學分的考試只能計算一次。MCDBA 系列中的考試 Exam 70-240 是個例外。
SQL mail正確配置和使用
SQL mail主要是要完成這樣的功能有:
用戶在網上注冊後,系統將隨機產生的密碼發送到用戶登記的Email
用戶在論壇的帖子有回復時將內容發送到用戶的Email
因為上述過程都是在存儲過程中完成的,所以避免了前台程序對參數的傳輸處理,也不需要再用第三方的組件完成,感覺比較方便。
1.為了使用SQL mail,首先你的服務器上得有SMTP服務,我沒有安裝win2000 server自帶的SMTP,而是用imail6.04的SMTP,感覺比較穩定,功能也比較強。
2.安裝一個郵件系統,我安裝了outLook 2000,我發現在配置郵件profile時,如果不安裝outLook而是用別的第三方程序,win2k中文server版在控制面板中就找不到“郵件”一項。
3.安裝完outlook後再刷新控制面板,就會找到“郵件”一項,雙擊進行郵件的配置,為配置文件起一個名字(假設為myProfile),以便以後SQL mail使用,在該配置文件中設置各項屬性。
4.啟動outlook(設置為用myProfile作為默認的配置文件),測試進行收發郵件,確認outlook工作正常。
5.用當前的域賬戶啟動SQL server,在企業管理器的支持服務中,點擊SQL mail的屬性,可以看到在配置文件選擇中,出現了剛才定義的myProfile配置文件(你也可以定義多個profile),選擇這個配置文件進行測試,SQL將返回成功開始和結束一個MAPI會話的信息,如果出現錯誤或是沒有找到郵件配置文件,那一定是你啟動SQL Server用的賬號有問題。
6.現在你就可以在查詢分析器中用XP_sendmail這個擴展存儲過程發送SQL mail了,格式如下:
xp_sendmail {[@recipients =] 'recipIEnts [;...n]'}
[,][@message =] 'message']
[,][@query =] 'query']
[,][@attachments =] attachments]
[,][@copy_recipients =] 'copy_recipIEnts [;...n]'
[,][@blind_copy_recipients =] 'blind_copy_recipIEnts [;...n]'
[,][@subject =] 'subject']
[,[@type =] 'type']
[,][@attach_results =] 'attach_value']
[,][@no_output =] 'output_value']
[,][@no_header =] 'header_value']
[,][@width =] width]
[,][@separator =] 'separator']
[,][@echo_error =] 'echo_value']
[,][@set_user =] 'user']
[,][@dbuse =] 'database']
其中@recipIEnts是必需的
參數說明:
@recipIEnts 收件人,中間用逗號分開
@message 要發送的信息
@query 確定執行並依附郵件的有效查詢,除觸發器中的插入表及刪除表外,此查詢能引用任何對象
@attachments 附件
@copy_recipIEnts 抄送
@blind_copy_recipIEnts 密送
@subject 標題
@attach_results 指定查詢結果做為附件發送
@no_header 不發送查詢結果的列名
@set_user 查詢聯接的用戶名,默認為Guset
@dbuse 查詢所用的數據庫,默認為缺省數據庫
7.不過,如果是在web應用中使用SQL mail,還有一些問題要解決:首先,就是應用程序中連接數據庫的賬號,我在網站程序中的數據庫連接是使用UDL文件,賬號為DbGuest,這是一個普通帳戶,所以還必須在master庫的擴展存儲過程找到XP_sendmail,並在其屬性中增加DbGuest這個用戶,並選擇EXEC權限。
SQL服務器外網IP測試故障解決
問:我的SQL服務器在用UDL文件進行SQL Server連接測試時(測試是在SQL服務器上)
用別名和127.0.0.1都可以測試連接成功,但是用服務器的外網IP就可以連接
此服務器為商用專用服務器..系統為win2000 server sp4 如果用外網連接不上,我就不可以遠程連上服務器了,急求解
答:ping <服務器IP地址/服務器名稱>
如果 ping <服務器IP地址> 不成功,說明物理連接有問題,這時候要檢查硬件設備,如網卡,HUB,路由器等.
還有一種可能是由於客戶端和服務器之間安裝有防火牆軟件造成的,比如 ISA Server.防火牆軟件可能會屏蔽對 ping,telnet 等的響應 如果ping <服務器IP地址> 成功而,ping <服務器名稱> 失敗
則說明名字解析有問題,這時候要檢查 DNS 服務是否正常.
有時候客戶端和服務器不在同一個局域網裡面,這時候很可能無法直接使用服務器名稱來標識該服務器,這時候我們可以使用HOSTS文件來進行名字解析, 1.使用記事本打開HOSTS文件(一般情況下位於C:\WINNT\system32\drivers\etc).
添加一條IP地址與服務器名稱的對應記錄,如:
172.168.10.24 myserver
2.或在 SQL Server 的客戶端網絡實用工具裡面進行配置,後面會有詳細說明.
============= 其次,使用 telnet 命令檢查SQL Server服務器工作狀態 =============
telnet <服務器IP地址> 1433
如果命令執行成功,可以看到屏幕一閃之後光標在左上角不停閃動,這說明 SQL Server 服務器工作正常,並且正在監聽1433端口的 TCP/IP 連接
如果命令返回"無法打開連接"的錯誤信息,則說明服務器端沒有啟動 SQL Server 服務,
也可能服務器端沒啟用 TCP/IP 協議,或者服務器端沒有在 SQL Server 默認的端口1433上監聽.
=============接著,我們要到服務器上檢查服務器端的網絡配置,檢查是否啟用了命名管道.是否啟用了 TCP/IP 協議等等 =============
可以利用 SQL Server 自帶的服務器網絡使用工具來進行檢查.
點擊:程序 -- Microsoft SQL Server -- 服務器網絡使用工具 一般而言,我們啟用命名管道以及 TCP/IP 協議.
點中 TCP/IP 協議,選擇"屬性",我們可以來檢查 SQL Server 服務默認端口的設置。一般而言,我們使用 SQL Server 默認的1433端口.如果選中"隱藏服務器",則意味著客戶端無法通過枚舉服務器來看到這台服務器,起到了保護的作用,但不影響連接.
=========== 接下來我們要到客戶端檢查客戶端的網絡配置 ==========
我們同樣可以利用 SQL Server 自帶的客戶端網絡使用工具來進行檢查, 點擊:程序 -- Microsoft SQL Server -- 客戶端網絡使用工具 一般而言,我們同樣需要啟用命名管道以及 TCP/IP 協議.
點擊 TCP/IP 協議,選擇"屬性",可以檢查客戶端默認連接端口的設置,該端口必須與服務器一致. 連接參數中的服務器是真正的服務器名稱,兩者可以相同或不同.別名的設置與使用HOSTS文件有相似之處. ----------------------------------------------------------------------------
二."無法連接到服務器,用戶xxx登陸失敗"
該錯誤產生的原因是由於SQL Server使用了"僅 Windows"的身份驗證方式,
因此用戶無法使用SQL Server的登錄帳戶(如 sa )進行連接.解決方法如下所示:
1.在服務器端使用企業管理器,並且選擇"使用 Windows 身份驗證"連接上 SQL Server --右鍵你的服務器實例(就是那個有綠色圖標的)
--編輯SQL Server注冊屬性
--選擇"使用Windows身份驗證"
2.展開"SQL Server組",鼠標右鍵點擊SQL Server服務器的名稱,選擇"屬性",再選擇"安全性"選項卡
3.在"身份驗證"下,選擇"SQL Server和 Windows ".
4.重新啟動SQL Server服務.
在以上解決方法中,如果在第 1 步中使用"使用 Windows 身份驗證"連接 SQL Server 失敗,那就通過修改注冊表來解決此問題:
1.點擊"開始"-"運行",輸入regedit,回車進入注冊表編輯器
2.依次展開注冊表項,浏覽到以下注冊表鍵:
[HKEY_LOCAL_MacHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer]
3.在屏幕右方找到名稱"LoginMode",雙擊編輯雙字節值
4.將原值從1改為2,點擊"確定"
5.關閉注冊表編輯器
6.重新啟動SQL Server服務.
此時,用戶可以成功地使用sa在企業管理器中新建SQL Server注冊,
但是仍然無法使用Windows身份驗證模式來連接SQL Server.
這是因為在 SQL Server 中有兩個缺省的登錄帳戶:
BUILTIN\Administrators
<機器名>\Administrator 被刪除. 1.打開企業管理器,展開服務器組,然後展開服務器
2.展開"安全性",右擊"登錄",然後單擊"新建登錄"
3.在"名稱"框中,輸入 BUILTIN\Administrators
4.在"服務器角色"選項卡中,選擇"System Administrators"
5.點擊"確定"退出
6.使用同樣方法添加 <機器名>\Administrator 登錄. 以下注冊表鍵:
HKEY_LOCAL_MacHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\LoginMode
的值決定了SQL Server將采取何種身份驗證模式.
1.表示使用"Windows 身份驗證"模式
2.表示使用混合模式(Windows 身份驗證和 SQL Server 身份驗證).
----------------------------------------------------------------------------- 如果遇到第三個錯誤,一般而言表示客戶端已經找到了這台服務器,並且可以進行連接,不過是由於連接的時間大於允許的時間而導致出錯。這種情況一般會發生在當用戶在Internet上運行企業管理器來注冊另外一台同樣在Internet上的服務器,並且是慢速連接時,有可能會導致以上的超時錯誤.有些情況下,由於局域網的網絡問題,也會導致這樣的錯誤.
要解決這樣的錯誤,可以修改客戶端的連接超時設置。默認情況下,通過企業管理器注冊另外一台SQL Server的超時設置是 4 秒,而查詢分析器是 15 秒(這也是為什麼在企業管理器裡發生錯誤的可能性比較大的原因). 企業管理器中的設置:
1.在企業管理器中,選擇菜單上的"工具",再選擇"選項"
2.在彈出的"SQL Server企業管理器屬性"窗口中,點擊"高級"選項卡
3.在"連接設置"下的"登錄超時(秒)"右邊的框中輸入一個比較大的數字,如 20. 工具 -- 選項 -- 連接 -- 將登錄超時設置為一個較大的數字
SQL Server語句做數值大小比較的實現
問:SQL Server裡 ①表有一個字段。通過條件查詢出來其中一個字段的返回值。
②表有二個字段。通過條件查詢出來其中2個字段的返回值,並將其值相加。 如果返回①表的值大於②表的值,則返回“錯誤”的提示。 怎麼寫這個sql語句?
答:
create table t1 idd varchar(10) not null,
value int not null create table t2 idd varchar(10) not null,
value1 int not null,
value2 int not null insert into t1
select '1', 10
union all
select '2', 20
insert into t2
select '1', 3, 5
union all
select '2', 12, 9
declare @Res varchar(10)
select @Res = case when ((select t1.value from t1 where idd='2') > (select value=t2.value1+t2.value2 from t2 where idd='2') )
then '錯誤' else '正確' end
select @Res
drop table t1
drop table t2 正確如何在SQL Server中插入時間類型的數據
問:如在Oracle中有以下的語句:
INSERT INTO mytable (id,time) VALUES (100,to_date('2005-3-23 11:23:25','YYYY-MM-DD HH24:MI:SS'));
但是SQL Server不支持to_date 答:
create table simp id int,
time datetime --SQL裡自帶時間格式 insert into simp(id,time) values (100,'2005-3-23 11:23:25')
go
select * from simp
drop table simp
決定輸入的日期如何解釋的是set dateformat設置
SET DATEFORMAT
設置用於輸入 datetime 或 smalldatetime 數據的日期部分(月/日/年)的順序。 SET DATEFORMAT { format | @format_var } format | @format_var
是日期部分的順序。可以是 Unicode 或轉換為 Unicode 的 DBCS。有效參數包括 mdy、dmy、ymd、ydm、myd 和 dym。美國英語默認值是 mdy。 該設置僅用在將字符串轉換為日期值時的解釋中。它對日期值的顯示沒有影響。
SET DATEFORMAT 的設置是在執行或運行時設置,而不是在分析時設置。 SET DATEFORMAT 權限默認授予所有用戶。 下例使用不同的日期格式處理不同格式的日期字符串。
SET DATEFORMAT mdy
GO
DECLARE @datevar datetime
SET @datevar = '12/31/98'
SELECT @datevar
GO
SET DATEFORMAT ydm
GO
DECLARE @datevar datetime
SET @datevar = '98/31/12'
SELECT @datevar
GO
SET DATEFORMAT ymd
GO
DECLARE @datevar datetime
SET @datevar = '98/12/31'
SELECT @datevar
GO
局域網SQL Server實例調試問題
問:局域網內的兩台裝有MSDE2000的電腦在SQL Server 服務管理器裡只能看到自己的實例,卻看不到對方的實例,只有對方的電腦名,是怎麼回事? 具體情況如下:
局域網是通的,能夠ping通對方電腦的名稱和IP。用MSDE2000在局域網的兩台電腦分別安裝了一個數據庫實例,實例名不是缺省的計算機名,安裝正常。在桌面右下角的SQL Server服務管理器的服務器一欄中,自己電腦的服務器實例名能顯示出來,也能正常運行。但是,另一台電腦的服務器實例名沒有顯示,只顯示另一台電腦的計算機名,這台電腦也不能正確連接另一台電腦上安裝的數據庫。在另一台電腦上也是這樣情況,請問是怎麼回事?如何解決? 一、如果兩台機器都安裝SQLServer後,再裝的MSDE2000:
1,在服務器組中右鍵,選擇“新建SQL Server 注冊”
2,按提示點“下一步”
3,添加服務器(你局域網內的服務器,系統會自動搜索)。
4,選擇“SQL身分驗證模式”
5,輸入你的用戶名和密碼,例如如用戶名: Sa .你也可以選擇“連接時提示輸入SQL 6, 然後連續“下一步”完成添加。
SQL Server沒有注冊不能使用遠程服務器.
二、如果沒有安裝SQL Server,只安裝了MSDE,不能在企業管理器裡進行注冊:
方法一:試一試用ODBC能夠聯過去嗎?你裝MSDE的話,是不是還用前台的程序連接,要是有的話,你試一試用IP連接。
MSDE的身份驗證是可以在注冊表中修改的,你也可以試一試!
HKEY_LOCAL_MacHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer下的loginmode 如果用t-sql語句,可用下面的
sp_addserver
定義遠程服務器或本地 Microsoft® SQL Server™ 的名稱。提供 sp_addserver 是為向後兼容。請使用 sp_addlinkedserver。 sp_addserver [ @server = ] 'server'
[ , [ @local = ] 'local' ]
[ , [ @duplicate_ok = ] 'duplicate_OK' ] [@server =] 'server'
服務器的名稱。雖然不允許使用空格,但是服務器的名稱必須是唯一的,而且遵循 Microsoft Windows NT® 計算機名稱的規則。server 是的數據類型為 sysname,無默認設置。
如果計算機上安裝了多個 SQL Server 實例,則實例將如同在一個獨立服務器上運行。通過以下列格式引用服務器來指定命名實例:servername\instancename。
[@local =] 'LOCAL'
指定要添加的服務器是本地服務器還是遠程服務器。@local 的數據類型為 varchar(10),默認值為 NULL。指定 @local 為 LOCAL 將定義 @server 為本地服務器的名稱並使 @@SERVERNAME 函數返回 server。(在安裝過程中,安裝程序將該變量設置為計算機名。建議不要更改該名稱。默認情況下,用戶可通過計算機名連接到 SQL Server 而無需額外的配置。)只有將服務器關閉然後重新啟動後,本地的定義才會生效。每個服務器中只能定義一個本地服務器。
[@duplicate_ok =] 'duplicate_OK'
指定是否允許重復的服務器名。@duplicate_OK 的數據類型為 varchar(13),默認值為 NULL。@duplicate_OK 只能有 duplicate_OK 或 NULL 這兩個值。如果指定了 duplicate_OK,則即使要添加的服務名已經存在,也不會發生錯誤。如果沒有使用命名參數,則必須指定 @local。 0(成功)或 1(失敗)若要執行運行較早版本的 SQL Server 的遠程服務器上的存儲過程(遠程過程調用),請使用 sp_addserver 添加遠程服務器。若要執行運行 SQL Server 7.0 的遠程服務器上的存儲過程(或任何分布式查詢),請使用 sp_addlinkedserver 添加服務器。
若要設置或清除服務器選項,請使用 sp_serveroption。
在用戶定義的事務內不能使用 sp_addserver。只有 setupadmin 和 sysadmin 固定服務器角色的成員才能執行 sp_addserver。下面的示例在本地服務器上為遠程服務器 ACCOUNTS 創建一個條目。
sp_addserver 'ACCOUNTS'
SQL Server數據庫六種數據移動方法
本人從事的工作是數據庫管理員,要維護多台服務器中的數據庫,經常把某台服務器中的某個數據庫移動到另外一台服務器,對數據的移動有些心得體會,希望和大家共同交流。
1. 通過工具DTS的設計器進行導入或導出DTS的設計器功能強大,支持多任務,也是可視化界面,容易操作,但知道的人一般不多,如果只是進行SQL Server數據庫中部分表的移動,用這種方法最好,當然,也可以進行全部表的移動。在SQL Server Enterprise Manager中,展開服務器左邊的+,選擇數據庫,右擊,選擇All tasks/Import Data...(或All tasks/Export Data...),進入向導模式,按提示一步一步走就行了,裡面分得很細,可以靈活的在不同數據源之間復制數據,很方便的。而且可以另存成DTS包,如果以後還有相同的復制任務,直接運行DTS包就行,省時省力。也可以直接打開DTS設計器,方法是展開服務器名稱下面的Data Transformation Services,選Local Packages,在右邊的窗口中右擊,選New Package,就打開了DTS設計器。值得注意的是:如果源數據庫要拷貝的表有外鍵,注意移動的順序,有時要分批移動,否則外鍵主鍵,索引可能丟失,移動的時候選項旁邊的提示說的很明白,或者一次性的復制到目標數據庫中,再重新建立外鍵,主鍵,索引。
其實建立數據庫時,建立外鍵,主鍵,索引的文件應該和建表文件分開,而且用的數據文件也分開,並分別放在不同的驅動器上,有利於數據庫的優化。
2. 利用Bcp工具
這種工具雖然在SQL Server7的版本中不推薦使用,但許多數據庫管理員仍很喜歡用它,尤其是用過SQL Server早期版本的人。Bcp有局限性,首先它的界面不是圖形化的,其次它只是在SQL Server的表(視圖)與文本文件之間進行復制,但它的優點是性能好,開銷小,占用內存少,速度快。有興趣的朋友可以查參考手冊。
3. 利用備份和恢復
先對源數據庫進行完全備份,備份到一個設備(device)上,然後把備份文件復制到目的服務器上(恢復的速度快),進行數據庫的恢復操作,在恢復的數據庫名中填上源數據庫的名字(名字必須相同),選擇強制型恢復(可以覆蓋以前數據庫的選項),在選擇從設備中進行恢復,浏覽時選中備份的文件就行了。這種方法可以完全恢復數據庫,包括外鍵,主鍵,索引。
4. 直接拷貝數據文件
把數據庫的數據文件(*.mdf)和日志文件(*.ldf)都拷貝到目的服務器,在SQL Server Query Analyzer中用語句進行恢復:
EXEC sp_attach_db @dbname = 'test',
@filename1 = 'd:\mssql7\data\test_data.mdf',
@filename2 = 'd:\mssql7\data\test_log.ldf'
這樣就把test數據庫附加到SQL Server中,可以照常使用。如果不想用原來的日志文件,可以用如下的命令:
EXEC sp_detach_db @dbname = 'test'
EXEC sp_attach_single_file_db @dbname = 'test',
@physname = 'd:\mssql7\data\test_data.mdf'
這個語句的作用是僅僅加載數據文件,日志文件可以由SQL Server數據庫自動添加,但是原來的日志文件中記錄的數據就丟失了。
5. 在應用程序中定制
可以在應用程序(PB、VB)中執行自己編寫的程序,也可以在Query Analyzer中執行,這種方法比較靈活,其實是利用一個平台連接到數據庫,在平台中用的主要時SQL語句,這種方法對數據庫的影響小,但是如果用到遠程鏈接服務器,要求網絡之間的傳輸性能好,一般有兩種語句:
1> select ... into new_tablename where ...
2> insert (into) old_tablename select ... from ... where ...
區別是前者把數據插入一個新表(先建立表,再插入數據),後者是把數據插入已經存在的一個表中,我個人喜歡後者,因為在編程的結構上,應用的范圍上,第二條語句強於前者。
6. SQL Server的復制功能
SQL Server提供了強大的數據復制功能,也是最不易掌握的,具體應用請參考相關資料,值得注意的是要想成功進行數據的復制工作,有些條件是必不可少的:
1>SQL Server Agent必須啟動,MSDTC必須啟動。
2>所有要復制的表必須有主鍵。
3>如果表中有text或image數據類型,必須使用with log選項,不能使用with no_log選項。
另外max text repl size選項控制可以復制的文本和圖像數據的最大規模,超過這個限制的操作將失敗。
4>在要進行復制的計算機上,應該至少是隱含共享,即共享名是C$或D$…。
5>為SQL Server代理使用的Windows NT帳號不能是一個本地的系統帳號,因為本地的系統帳號不允許網絡存取。