2011年3月27日 星期日

10 月 16日「微軟線上專家對談」主題:SQL Server 2000 的管理技巧

10 月 16日「微軟線上專家對談」主題:SQL Server 2000 的管理技巧


     回「微軟線上專家對談」首頁

問題數

問題描述與解答

Q1: 想替一個table的數個欄位資料,進行加密動作,讓user無法直接下select來看data,可以直接用pwdencrypt來加密,怎麼做呢
A: Pwdencrypt是一個內部的函數,很抱歉不支援的。
建議您可以在Web查詢
Q2: 資料已經寫入資料庫可是發現好像有誤需要還原至前一步驟該怎麼做
A: 若您有設定備份的話,可以利用簡單還原的方法來回復資料,但並沒有直接的指令可以還原至上一步驟
Q3: 叢集上安裝 Service Pack請問該怎麼辦
A: 請參考811168 INF SQL Server 2000 Service Pack 3 or Service Pack 3a Pre-Installation
http://support.microsoft.com/?id=811168
Q4: 資料已分割後要再更新回原本的Table,該如何做
A:

請使用1. ALTER TABLE指令把資料表結構修改回來(但資料會受影響)
2. Backup
Restore使用先前的備份還原資料表
3.
直接建一個新資料表,把資料Copy回去

Q5: 最近公司想進行異地備援的設定,請問該設定那幾個要項,使資料可以異地同步
A: 同步備份的成本以及技術比較高,中小企業比較適合非同步異地備援
Q6: 不知有沒有人系統建置是ASP┼SQL Server,在語系設定上不知有沒有人遇到問題
A: SQL Server 2000中文版預設安裝的語系和定序法都是以繁體中文為主的,所以不會有什麼太大問題,會發生問題的大多是資料庫升級或新建時語系不對所致
Q7: 是不是如果安裝Cluster就一定要安裝MSDTC

A:

並非一定要安裝MSDTC,只有您需要使用COM+或分散式事務,才一定要安裝MSDTC
Q8: 之前一直廣告的SQL Server 64 Bit不知效能是不是真的很強大,是不是可以請有用過的人分享一下呢
A: 64 Bit要搭配64 BitCPU才可以,請特別留意,功能上面是完全一樣,但是因為CPU的關係,加上64 bit最佳化,對於這種多執行序的運算可以大幅提昇效能
Q9: 兩個Cluster groups可以分兩個Server Run嗎
A: 請問是不是指active/active模式,請您提供進一步的資訊,我們將盡快與您聯繫!
Q10: 輸入一個以上的查詢字串,對三個資料庫_在不同的伺服器內的資料表進行查詢,如何下指令呢
A: 首先,您需要先使用sp_addlinkedsrvloginsp_addlinkedserver加入要查詢的伺服器,再用[server].[databasename].[tablename]的格式就可以查詢
Q11: 檢視兩個以上或是全文檢索全部欄位怎麼做啊謝謝
A: 請參考以下為對兩個以上的欄位做LIKE搜尋和全文檢索的搜尋
1.
對兩個欄位以上做 LIKE search
您可以直接在SELECTWHERE部份用AND串接兩個LIKE子句
2.
全文檢索
您首先要對資料表的欄位設定好全文檢索的索引
sp_fulltext_catalog
建立和卸除全文檢索目錄,以及啟動和停止資料庫目錄的索引動作。每一個資料庫都可以建立多個全文檢索目錄。
sp_fulltext_colunm
指定資料表中特定的資料行是否參與全文檢索索引。
sp_fulltext_database
初始化全文檢索索引或從目前的資料庫移除所有的全文檢索目錄。
sp_fulltext_table
標記或取消標記資料表的全文檢索索引。
再利用Transact-SQL的全文檢索運算子來搜尋,這個部份可以在SQL Server Books Online找到
Q12: 如何可用程式查詢出目前有那些database
A: 請使用sp_databases預存程序查詢
Q13: 請問大家都是用何方法存取欄位的defult和description
A: 請利用sp_columnssp_columns_ex預存程序來存取表格欄位的內容,其中的COLUMN_DEF 即為預設值default
Q14: 請問升級至SQL Server 2000 的SP3有何需特別注意事項
A: 建議您先備份重要資料。另外,如果是群集的話,請按照SP3a的sp3readme.htm中的方法。
811168 INF: SQL Server 2000 Service Pack 3 or Service Pack 3a Pre-Installation
http://support.microsoft.com/?id=811168
Q15: Create Database與Create Table 可以一起放置在同一個Procedure內嗎
A: 請特別注意CREATE DATABASE一定要擺在CREATE TABLE
Q16: 請問建立資料庫圖表如何將此資料庫圖表複製到另一台伺服器相同的資料庫
A: 請參考320125 HOW TO Move a Database Diagram
http://support.microsoft.com/?id=320125
Q17: 有一table的欄位其資料型態為datsetime如何只select Date的部份不要時間的部份,是否有function可利用
A: 請使用CONVERT()函式來達到這樣的功能
Q18: 一直發生交易記錄檔太大,請問該怎麼辦
A: 請參考INF 如何將 SQL Server 交易記錄檔壓縮http://support.microsoft.com/default.aspx?scid=kb;zh-tw;256650
Q19: 如何下設定複合主索引鍵的語法
A: Microsoft SQL Server執行查詢時,查詢最佳化器會評估各種擷取資料方法的成本,然後使用最有效率的方法,SQL Server可能會執行資料表掃描,或者如果有索引的話,也可能使用索引。
SQL Server執行資料表掃描時,會從資料表的開頭逐列往下掃描,然後抽選出符合查詢準則的資料列。當SQL Server使用索引時,它會找尋查詢所需資料列的儲存位置,然後只抽選出需要的資料列。
當您考慮是否要在資料行上建立索引時,請先想想看在查詢時是否會使用到加索引的資料行,以及其使用方法。索引在查詢時很有用:
搜尋符合特定搜尋關鍵值(Key Value)的資料列(完全符合的查詢)。所謂完全符合的比對,是指查詢使用WHERE陳述式來指定一個帶有既定值的資料行項目。例如:WHERE emp_id='VPA30890F'
搜尋其搜尋關鍵值(Key Value)介於一個數值範圍內的資料列(範圍查詢)。所謂範圍查詢,是指查詢所指定的項目,其數值介於兩個數值之間。例如:
WHERE job_lvl BETWEEN 9 and 12
WHERE job_lvl >= 9 and job_lvl <= 12
根據聯結述詞,搜尋資料表T1中與另一個資料表T2中某一資料列相符的資料列(帶有巢狀迴圈聯結的索引)。
不執行明確的排序動作,即能產生排序過的查詢輸出,尤其是排序過的動態資料指標Cursor
不執行明確的排序動作,即能依排序順序掃描資料列,以執行順序化操作,例如合併聯結和資料流彙總。
以優於掃描整個資料表的方式掃描資料表中所有的資料列,因為要掃描的資料行集與整體的資料量減少了手邊查詢的涵蓋索引。
搜尋插入與更新操作中重複的新搜尋關鍵值Key Value,以強制使用PRIMARY KEYUNIQUE條件約束。
搜尋已定義FOREIGN KEY條件約束的兩個資料表中相符之資料列。
如果比對模式是以特定的字元字串作為開頭,例如'abc%',則在執行使用LIKE比對的查詢時,運用索引會很有幫助,但如果比對模式是以萬用字元為開頭,例如 '%xyz',則沒有太大的用處。
在許多查詢中,索引的好處是多重的。例如,索引除了涵蓋查詢之外,還可以執行範圍查詢。SQL Server可以在同一個查詢中使用一個資料表的多個索引,以及合併多個索引使用聯結演算法,以便各搜尋索引鍵共同涵蓋一個查詢。此外,SQL Server也會自動決定在查詢時要使用哪些索引,並確保資料表經過修改之後,其中所有的索引都能隨之更新
Q20: 請問OPENROWSET與OPENDATASOURCE在使用上有何差異
A: OPENROWSET支援直接將查詢字串傳遞到資料來源,但OPENDATASOURCE只能開啟資料來源
Q21: 剛開學老師要我們用SQL Server製作班上成績,請問大家一般都是怎麼弄的
A: 在資料庫建立一個table,之後用使用程式開發工具,連結至SQL Server去做到你想達到的功能
Q22: 請問有人試過用ADO.Connection的Execute執行一堆T-SQL語法嗎
A: 建議您用Execute去執行stored procedure速度會比較快
Q23: A table裡有兩個update的trigger B & C請問再runtime的時候到底哪一個會先被執行
A:

請使用FOR子句指定trigger的執行時間:
a.. AFTER
trigger
trig它們的語句完成後執行。如果該語句因錯誤(如違反約束或語法錯誤)而失敗,trigger將不會執行。不能為視圖指定 AFTER trigger,只能為表指定該trigger。可以為每個trig操作(INSERTUPDATE DELETE)指定多個AFTERtrigger。如果表有多個AFTERtrigger,可使用sp_settriggerorder定義哪個AFTERtrigger最先激發,哪個最後激發。除第一個和最後一個trigger外,所有其他的AFTERtrigger的激發順序不確定,並且無法控制。
SQL Server 2000不能在SQL Server 7.0版或更早的版本中指定AFTERINSTEAD OF,這些版本中的所有trigger都作為AFTERtrigger執行。
b.. INSTEAD OF
trigger代替trig操作執行。可在表和視圖上指定INSTEAD OFtrigger。只能為每個trig操作(INSERTUPDATE DELETE)定義一個INSTEAD OFtriggerINSTEAD OF trigger可用於對INSERTUPDATE語句中提供的資料值執行增強的完整性檢查。INSTEAD OFtrigger
還允許指定某些操作,使一般不支援更新的視圖可以被更新

Q24: 請問在SQL Server的管理要注意那些要項呢
A:

SQL Server DBA 的工作有下列幾項要注意的
1.
資料庫的建置, 管理與維護_檔案群組
2.
資料庫安全_使用者與權限管理
3.
備份與還原_資料安全
4.
效能的調校
5.
用戶端與伺服器的網路連結
6.
伺服器系統升級與更新_
含修補

Q25: 目前是使用QUERY ANALYZER來DEBUG,請問有像VB的命令視窗嗎
A: 請您提供進一步的資訊,一旦獲得您進一步的訊息,我們將盡快與您聯繫
Q26: 某欄位當初設定為Char 儲存為日期的字串資料 例如: 03/20/2003我想要把他轉換為Date Format
A: 請使用CONVERT()來達到您要的功能
Q27: 當Replication後,資料表的結構修改怎麼做?需要注意哪些事項
A: 如果是SQL Server 7.0,您無法再做資料表的結構修改。只有去除replication後再改,再做replication。而SQL Server 2000支援對現有資料庫進行一般的架構更改
Q28: 請問Log Shipping是什麼意思啊
A: 事件傳送,使用事件傳送不間斷地將事件從一個資料庫提供給另一個。不間斷地從來源資料庫中備份事件,然後將它們複製並還原到目的資料庫,使目的資料庫與來源資料庫保持同步。這使您得以有一台備用伺服器,為將查詢處理從主電腦_來源伺服器卸載到唯讀目的伺服器上提供了一條途徑。所有伺服器上都必須安裝SQL Server 2000企業版
Q29: 請問有沒有SP可以將指定機器上所有的資料庫列出來
A: 請使用SELECT * FROM master..sysdatabases
Q30: 缷離資料庫時,發生此資料庫為複寫狀態,無法缷離,應該怎麼辦呢
A: 請您提供您的機器及相關資料,一旦獲得您進一步的資訊,我們將盡快與您聯繫
Q31: Cube或rollup的查詢結果差異是什麼不同呢,還有如何分別which時機上需要用到這兩個參數
A:

請參考如下:a.. CUBE將產生一個結果集,顯示出選定資料行之所有數值組合的彙總Aggregate
b.. ROLLUP
將產生一個結果集,顯示出選定資料行之數值階層架構Hierarchy
的彙總

Q32: 每天需定時執行一個stored procedure,不知有無簡單指令可以達成呢
A: 請使用SQL server 裡面內建的JOB工作裡面可以設定定時執行SQL指令等相關功能如果需要比較複雜的功能可以使用DTS來操作
Q33: SQL Server 2000可以Restore SQL Server 7的資料庫嗎
A: Yes. Other than the master, model, msdb, and distribution databases, SQL Server 7.0 databases are compatible with SQL Server 2000
For more info, please refer to SQL Server 2000 FAQ
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q261334
Q34: Update statistics 和 Dbcc dbreindex差異為何呢
A:

UPDATE STATISTICS是更新指定的資料表或索引檢視中一或多個統計群組集合索引鍵值散發的相關資訊。
DBCC DBREINDEX
則是指重建資料庫中某個資料表的一個或多個索引

Q35: Instead of update trigger & For update trigger是什麼不同呢
A:

a.. AFTER
trigger
trig它們的語句完成後執行。如果該語句因錯誤(如違反約束或語法錯誤)而失敗,trigger將不會執行。不能為視圖指定AFTER trigger,只能為表指定該trigger
可以為每個trig操作(INSERTUPDATE DELETE)指定多個AFTER trigger。如果表有多個AFTER trigger,可使用sp_settriggerorder定義哪個AFTER trigger最先,哪個最後。除第一個和最後一個trigger外,所有其他的AFTER trigger的順序不確定,並且無法控制。
SQL Server 2000AFTER是默認trigger。不能在SQL Server 7.0版或更早的版本中指定AFTERINSTEAD OF,這些版本中的所有trigger都作為AFTER trigger執行。
b.. INSTEAD OF
trigger代替trig操作執行。可在表和視圖上指定INSTEAD OF trigger。只能為每個trig操作(INSERTUPDATEDELETE)定義一個INSTEAD OF triggerINSTEAD OF觸發器可用於對INSERTUPDATE語句中提供的資料值執行增強的完整性檢查。
INSTEAD OF trigger
還允許指定某些操作,使一般不支援更新的視圖可以被更新

Q36: 我的excel匯入SQL Server時發現有些字出現wrong code,怎麼辦
A: 記得要選擇UNICODE的欄位
Q37: 請問如何decrpyt己sp encrypt的機器
A: 加密的作業無法逆向還原
Q38: run table有時會被dead lock,但有時又很正常,如何解決呢
A: 224453 INF Understanding and Resolving SQL Server 7.0 or 2000 Blocking Problems
http://support.microsoft.com/?id=224453
Q39: 請問有沒有辦法在STORED PROC中直接CALL DTS讓他啟動
A:

There are two main methods of executing a DTS package from within T-SQL, either using the DTSRUN utility to perform the execution, or going through the DTS object model.For more information, please refer to this hyperlink
http://www.sqldts.com

Q40: 有很多DB,目前都是透過DTS抓DB中資料,不知行不行包在一個SP,而不是Package來維護
A: 若您要將DTSTasksp來執行的話需要使用sp_OA*的預存程序群來呼叫DTS COM元件,執行DTSTask
Q41: I need to replace一個字串到所有Table,怎麼做最快呢
A: 請先收集有哪些資料庫其名稱,那些表格其名稱,那些欄位其名稱,然後使用store procedure去做
Q42: 如何偵測某暫存檔已存在,或者直接delete呢
A: 建議您使用類似於XP_fileexists等的方法
Q43: function & stored procedure的differences是什麼呢
A: Functionuser-defined function,是指由一或多個Transact-SQL陳述式組成的副程式,它可用來封裝程式碼,以便重複使用。Microsoft SQL Server 2000不限制使用者只能使用定義為Transact-SQL語言一部分的內建函數,而允許使用者建立他們自己的使用者自訂函數。
Stored Procedure
則是一組Transact-SQL的集合,您可以在sp中呼叫function,預存程序不會傳回數值來取代其名稱,也不能直接用在運算式中
Q44: Dim Sql_Str As String = "SELECT SUM(hours) FROM Off_Hour"hours欄位為nvarchar,程式執行時出現sum or average aggregate 動作不得用 nvarchar 資料型別作為引數。請問如何將hours欄位轉換成數值後加總
A: 請先確定hours是有效的數字。SELECT SUM(CAST(hours AS int)) FROM Off_Hour
Q45: 如何將某字串的字元更改成另一個字元
A: 請利用REPLACE()函式來達到您要的功能
Q46: stored proc中如何傳出全域變數
A: 請於全域變數後面加上output,線上叢書有相關的資訊以及sample code
Q47: 請問application role & database role有什麼不同呢
A:

AP ROLE指的是這個程式連結到資料庫存取資料的權限,而DB ROLE指的範圍就比這個大的多,一般來說,如果程式連結到SQL SERVER存取時,建議使用AP ROLE

Q48: 在Store Proc裡寫一段Select xxTable的資料,符合條件的資料和另一個Table比對,再做新增、刪除、修改,請問我在Store Proc裡該如何做比對
A:

請參考資料指標,T-SQL資料指標可以在一特定資料被篩選出來之後,進行相關的處理

Q49: INDEX VIEW是不是可以提高效能啊,有人試過嗎
A: 建議您使用indexed views。請查看線上幫助的indexed views主題
Q50: 請問日期的輸出格式如何自己轉換呢
A:

請參考
select convert(varchar(20), getdate(), 101)
10/16/2003
select convert(varchar(20), getdate(), 102)
2003.10.16
select convert(varchar(20), getdate(), 105)
16-10-2003
select convert(varchar(20), getdate(), 106)
16 Oct 2003
詳細資訊請參考Books OnlineConvert
函數

Q51: 請問SQL Server 2000 Developer應該可以裝在Windows XP上吧
A: 是的,裝在Windows XP是可正常運作
Q52: update Trigger執行SP當SP中執行Raiserror時 無法將訊息傳回至前端USER,請問如何解決
A: 請您提供進一步的資訊,一旦獲得您的答覆,我們將盡快與您聯繫!
Q53: 在EM中設定SQL Mail時,設定檔名稱在下拉式選單中抓不到,可是Exchange Server是可以正確收信的
A: 請參考153159 HOW TO Troubleshoot SQL Mail with Microsoft Exchange Server
http://support.microsoft.com/?id=153159
Q54: 有2個table皆無pk但欄位確定一致,如何command將所有資料都捉出來呢
A: 請您提供進一步的資訊,一旦獲得您的答覆,我們將盡快與您聯繫
Q55: 如何用http來post data至SQL server
A: 請使用ASP之類的動態網頁技術來做,必須先宣告SQL SERVER的連結參數,成功之後使用SQL EXEC之類的FUNC
即可將資料寫入SQL SERVER
Q56: 除了使用ADO.NET連線到 SQL Server存取資料庫,連接.asp有其他方式嗎
A:

若您是用ASP連接的話可用ADOASP.NET可用ADO.NET,您也可以用C++撰寫一個COM元件,元件中透過OLE DBODBCDB-Library(不建議)存取SQL Server,再讓ASPASP.NET呼叫這個元件

Q57: 敝公司的資料庫頗大,且都是銷售資料,請專家們建議如何規劃管理備份呢
A:

請參考Designing a Backup and Restore Strategy
http://msdn.microsoft.com/

Q58: 資料移轉除了備份再還原,有其他方法嗎
A:

利用SQL Server DTS來複製移轉資料

Q59: 公司有打算add一台DB,即時複寫原DB的資料,不知這樣是不是可行
A: 請您提供進一步的資訊,一旦獲得您的答覆,我們將盡快與您聯繫
Q60: 我們的SQL Server是PUBLIC,可是有些人就是連不上,請問如何檢測
A:

請進行下列測試步驟
1. Ping the server
2. Telnet the 1433 port
3. Check to see if the both server and client have enable the same protocol
4. Check to see if the server has listened TCP
IP 1433 port
5. Change the current protocal to another one
6. Create a alias for the server and try to connect use the alias

Q61: 請問什麼是DMZ
A: 建議您參考以下的網頁,有相當詳盡的說明
http://www.microsoft.com/taiwan/msdn/library/2003/Jun-2003/sql_DataPump.htm
Q62: SQL Server是不是根據不同的狀況自動決定使用which level of lock 如果想要自己設定可嗎
A:

SQL SERVER可以使用四種不同的鎖定
1.EXCLUSIVE LOCK
2.SHARED LOCK
3.UPDATED LOCK
4.INTERNET LOCK
您只要指定適當的參數即可

Q63: 更改SA密碼後 SQL Server Agent就無法啟動有得救嗎
A:

Windows 9x 系統,SA密碼必須為空。另外,可以查看SQL Agent.out文件。
259710 PRB SQL Server Agent Fails to Start on Windows 9x When You Change the
http://support.microsoft.com/?id=259710

Q64: SQL Server在兩岸三地間若是同步,若何避免檔案太大時就break down呢
A: 請您提供進一步的資訊,一旦獲得您的答覆,我們將盡快與您聯繫
Q65: 請問各位都是使用那種資料庫比對工具
A: 請參考http://www.sql-server-performance.com/sql_compare_review.asp
Q66: View確定是存在但為什麼看不見
A: 請注意該使用者有無使用VIEW的權限
Q67: 除了DTS,想把資料庫轉至SQL Server有其他方法嗎
A:

Backup and Restore
Sp_detach_db and Sp_attach_db stored procedures
314546 HOW TO: Move Databases Between Computers That Are Running SQL Server
http://support.microsoft.com/?id=314546

Q68: 使用本機端系統帳戶及使用網域使用者帳戶的差別在於那些
A:

本機使用者帳戶是指建立在本機上的帳戶,而網域的帳戶則是建在Active DirectoryWindows NT 4.0 Domain 的帳戶,使用網域帳戶可以集中管理並且可支援網域的安全性

Q69: 如何加大該欄位的字串長度避免出現輸入的值與資料行的資料型別或長度不一致
A:

請經由SQL Server Enterprise Manager來修改表格欄位的資料大小,或者用ALTER TABLE來修改,但要注意資料型態大小的最大值(如nvarchar的最大值是2000

Q70: 如Database customer table schema有change如何保留第二Database的customer table資料前提條件之下,由系統自動來異動第二Database的customer謝謝
A: 請您提供進一步的資訊,一旦獲得您的答覆,我們將盡快與您聯繫
Q71: 那邊可以find所有人下過的指令及時間呢
A: 請透過SQL Profiler來抓取使用者執行指令的時間與下指令的使用者,但若您未啟用SQL Profiler的話則不行

沒有留言: