很多時候,都需要使用到指令、語法來管理MS SQL資料庫,但通常都是記不住的,寫下來便於使用,至於管理,towns是很遜的,很多時候都是土法鍊鋼,一點一點做 ^^"
1. 指令管理資料庫關閉與啟動
net stop mssqlserver /y <==使用net 指令停止mssqlserver服務,並同時同意停止其他相關服務
net start sqlserveragent <==使用net 指令啟動sqlserveragent服務,系統會自動將mssqlserver 啟動
net stop 及 start 主要是用來停止與啟動系統中的服務,所有的服務都可以透過這樣的方式來管理,另一個towns常用的是IIS的管理。
注意:後面加的服務名稱並不是在“服務”中的“顯示名稱”,而是“服務名稱”
2. 列出abc所有的table
sp_tables @table_name = '%',@table_owner = 'dbo',@table_qualifier = 'abc'
sp_tables @TABLE_TYPE= "'table'" <== 列出所有table 名稱
sp_tables @table_name = '%' <== 列出所有table及veiw 名稱
3. 選擇所有欄位從 abcd 資料表中找出 cdef 欄,並找有towns完全相同的字串(單一條件絕對搜尋,顯示所有欄位)
select * from abcd where cdef = 'towns'
選擇cdef,aaa欄位從 abcd 資料表中找出 cdef 欄,並找有towns完全相同的字串(單一條件絕對搜尋,只顯示兩欄位)
select cdef,aaa from abcd where cdef ='towns'
4. 查尋資料庫版本
select @@version
5. 刪除特定資料表
delete from abc <==刪除abc資料表中的資料
delete
FROM abc
WHERE (abcde > '2013-03-07 15:37:00')
and abcde < '2013-03-07 15:57:00'
刪除abc資料表中 欄位abcde時間為 2013-03-07 15:37:00 ~ 15:57:00間的資料
6. MSSQL 2005 資料庫 <==> MSSQL 2005 Express 資料庫
MSSQL 2005 Express ==> MSSQL 2005。直接附加即可
MSSQL 2005 ==> MSSQL 2005 Express
1. 由MSSQL 2005 匯出資料庫結構。在指定資料庫按滑鼠右鍵==>工作==>產生指令碼==>下一步==>確認是否為選擇的資料庫,下一步==>在選擇指令碼選項中,不需做特別修改,下一步==>選擇物件類型,僅選擇資料表及檢視,下一步==>選擇資料表,全選,下一步==>選擇檢視,全選,下一步==>輸出選項,這裡依需求選擇,下一步(towns多選寫指令碼至檔案),下一步==>設定檔名及路徑
,存檔,下一步==>完成
註:對該資料庫需要有存取權限,如果只有讀取權限,匯出時會出現錯誤
2. 將結構檔匯入 MSSQL 2005 Express。開啟Managemant==>檔案==>開啟==>檔案==>選擇剛剛匯出的檔案==>這時系統會要求打入帳密(確認連結的資料庫是否正確,帳密需有寫入權限)==>此時結構語法已載入==>點入語法,並確認要載入的資料庫是否正確(系統會預設載入為master)==>執行==>結構載入
3. 將資料匯入 MSSQL 2005 Express。
3.1.連結資料庫匯入
開啟Managemant==>選擇資料來源(確認資料來源及登入資料,一般towns會使用ReadOnly 帳號,以避免錯誤)==>選擇目的地(確認目的地及登入資料,這裡需有寫入權限)==>指定資料表複製或查詢,towns通常是要複製,選從一或多個資料表或檢視複製資料,下一步==>全選所有的資料表及檢示,編輯,選刪除資料表中的資料列,並取消檢視,下一步==>立即執行==>確認工作==>完成
3.2.可用匯出檔案方式,將資料再匯入。
開啟Managemant==>選擇資料來源(確認資料來源及登入資料,一般towns會使用ReadOnly 帳號,以避免錯誤)==>選擇目的地(選擇excel)==>選擇匯出路徑並打入檔案名稱==>地區設定及字碼頁需依資料庫編碼決定 ==>從一或多個資料表或檢視複製資料 ==>下一步(這裡towns使用預設值)
注意事項:做匯出匯入的動作是非常危險的,方向一錯資料就不見了,建議在執行時,該備份的一定要先備份,不要嫌麻煩
技術指導:藍色小舖資深工程師 IZAN
補充說明:最近一次的測試,是可以直接使用MSSQL 2005 ent 備份出來的檔案,直接還原到 MSSQL 2005 Express版 中SQL Server Management Studio Express為 SP3版
7. MS SQL 2005 TCP/IP協定啟用
到開始Microsoft SQL 2005==>組態工具==>進入 SQL Server組態管理員(有些會出現英文)==>選擇 SQL Server 2005 網路組態==> 這裡可能會出現SQL及SQLEXPRESS,看哪個要開就開哪個 ==>選擇TCP/IP ==>IP位址==>確認IPALL中TCP通訊埠,是否有開起埠號(如預設值1433),在開啟後,要重新啟動SQL Server的服務,並使用netstat -an來檢查是否有開啟1433 port
8. 加快資料庫讀取速度,利用先將資料庫放到記憶體中,加快讀取速度
相關資料:http://blog.miniasp.com/post/2009/11/SQL-Server-Performance-Tuning-Caching-commonly-used-tables.aspx(感謝will大無私分享)
9. 在MSSQL資料庫轉移時,常常會遇到的問題
9.1. 資料庫使用還原或附加後,因為使用者不存在而造成網站無法正確讀取資料庫( 如圖nouser),此時需刪除並重建使用者
9.2. 要刪除使用者,重建時,發生使用者無法刪除,導致無法重建該使用者。常見原因有
9.2.1. 在該資料庫==>安全性==>結構描述中,有該使用者的名稱
處理方式:到結構描述中,將該使用者刪除,如果無法刪除,就與下面兩點有關
9.2.2. 在該資料庫==>資料表==>結構描述中,有該使用者的名稱(如圖table)
9.2.3. 在該資料庫==>檢示==>結構描述中,有該使用者的名稱(如圖view)
2000處理方式:手動將結構描述改為dbo
開啟SQL Server Enterprice Manager==>選擇該資料庫==>選擇資料表,其結構
描述為使用者名稱的==>到資料表上按滑鼠右鍵,選擇設計資料表==>按左上方“資料表與索引屬
性”(如圖property)==>變更擁有者為dbo(如圖property-1),存檔==>擁有者就改為dbo,就可
刪除帳號即可
2005處理方式:手動將結構描述改為dbo
開啟Microsoft SQL Server Management Studio==>選擇該資料庫==>選擇資料表,其結構
描述為使用者名稱的==>到資料表上按滑鼠右鍵,選擇設計==>在屬性中選結構描述==>變更擁有者
為dbo(如圖2005property),存檔==>擁有者就改為dbo,就可刪除帳號即可
2008處理方式:手動將結構描述改為dbo
開啟Microsoft SQL Server Management Studio==>選擇該資料庫==>選擇資料表,其結構
描述為使用者名稱的==>到資料表上按滑鼠右鍵,選擇設計==>在屬性中選結構描述==>變更擁有者
為dbo(如圖2008property),存檔==>擁有者就改為dbo,就可刪除帳號即可
註:SQL Server Management Studio 預設並不開啟屬性視窗,按F4就可開啟
技術指導:藍色小舖資深工程師 IZAN
補充:使用者擁有預存程序(如圖storedprocedure2),這個也會造成無法刪除使用者的問題,這時必須重建預設程序才能解決該問題。在預存程序上按滑鼠右鍵==>編寫預存程序指令碼為==>CREATE至==>產生指令碼,再將指令碼中的擁有者改為dbo,刪除該程序後重建這個預存程序。
技術指導:tina
10. 當同台主機安裝了多個MSSQL(如有有安裝2000、2005 Express、2005等)要注意
10.1.在進入SQL時,要選擇正確的版本
10.2.在新增帳號時,請使用2005來新增及指定資料庫,否則會發生帳號無法正常讀取的問題
11. 從 abcd 資料表中cdef 欄,找出有張及張*文的字串(兩條件模糊搜尋)
select * from abcd where (cdef LIKE '張%') OR (cdef LIKE '張%文')
12. 查詢T-SQL語法
sp_help
13. 列出資料庫清單,列出後再使用右鍵儲存結果為單一 CSV檔
13.1. 列出資料庫所有狀態
sp_helpdb
13.2. 僅列出資料庫名稱
USE master
SELECT dbid, DB_NAME(dbid) AS DB_NAME
FROM sysdatabases
ORDER BY dbid
資料來源:blues及tina口述
14. 查看每一個SQL語法的使用記錄
使用SQL Server Profiler 中新增追蹤,可以看到資料庫正在存取的情形
read ==>讀取硬碟資料筆數
write ==>寫入硬碟資料筆數
duration ==>經過時間,時間太長就表示讀取/寫入硬碟資料時很長,這是造成資料庫回應緩慢的原因(1000=1秒)
技術指導:藍色小舖資深工程師 IZAN
15. access 2007與資料庫連結(圖解)
1. 匯入mssql 資料:外部資料==>其他==>ODBC資料庫(如圖mdb1.jpg)
2. 選擇匯入方式,第一項為將資料cp一份到電腦中,第二項為連結同步,取得最新資料(如圖mdb2.jpg)
3. 選擇資料來源,請新增一個 DSN資料來源(如圖mdb3.jpg)
4. 選擇 SQL server 下一步(如圖mdb4.jpg),將DSN指定存放位置及設定名稱 下一步(如圖mdb5.jpg)
5. 與伺服器建立連結,打入伺服器名稱或IP(如圖mdb6.jpg)
6. 選擇連入帳戶,選擇第二項者,需打入帳號及密碼(如圖mdb7.jpg)
7. 指定取得資料庫,勾選變更預設資料庫即可選擇(如圖mdb8.jpg)
8. 這一塊使用預設值,不需變更(如圖mdb9.jpg),summary(如圖mdb10.jpg),完成後需打入帳密登入資料庫(如圖mdb11.jpg)
9. 選擇要匯入的 table(如圖mdb12.jpg),完成匯入
補充:關於access 2010新檔案格式問題
當使用access 2010匯出資料並存檔時,檔案格式為 *.accdb,如果要將檔案存為 *.mdb,需使用 儲存並發佈 的方式,這時就可以將檔案另存成 mdb格式了
16. 關於資料庫 ldf 檔非常大,但卻無法壓縮的問題
towns管理的伺服器中,有些資料庫的Log檔,實在是大的離譜,但在執行備份壓縮後,卻不見Log檔變小(如圖mssqlLog2.jpg),雖然說可用空間明顯加大(如圖mssqlLog.jpg),但檔案事實上是沒變小的,目前towns 將自動壓縮功能啟用(如圖mssqlLog3.jpg)並執行排程備份壓縮,是否能成功將 ldf 檔變小,今天晚上就可以知道了。
很可惜,ldf 檔並沒有變小,看來在動作中的資料庫,要壓縮是個問題呢
16.1.經過IZAN指導,要連續兩次壓縮,才能將ldf 檔變小,而且必需使用維護計畫來執行才能有效壓縮,可以先做一次手動備份LDF檔,再用計畫做備份壓縮,也可以有效處理
16.2.不需要設定自動壓縮功能(如圖mssqlLog3.jpg),也能有效壓縮
技術指導:藍色小舖資深工程師 IZAN
相關資料:http://ithelp.ithome.com.tw/question/10028911
補充1:LDF 檔有多大,就需要給他一個多大的空間來備份,如LDF約10GB,硬碟空間就要 > 10GB
補充2:使用T-SQL指令處理
T-SQL語法如下:
1. 截斷交易記錄檔:將資料庫「復原模式」改為「簡單」,即可即斷交易記檔
T-SQL:ALTER DATABASE 資料庫名稱 SET RECOVERY SIMPLE
2. T-SQL:SP_HELPDB 資料庫名稱 此時可查得 ldf 檔對應到的邏輯名稱(name),一般會是"資料庫名稱_log",但若之前是從備份資料還原到不同名稱的資料庫,邏輯名稱(name)就可能不一樣。
壓縮交易記錄檔
3. 執行以下指令後,應該可以發現ldf的檔案大小縮小成2MB
T-SQL:use 資料庫名稱 GO DBCC SHRINKFILE('ldf的邏輯名稱',2)
4. 將資料庫「復原模式」改回「完整」
T-SQL: ALTER DATABASE 資料庫名稱 SET RECOVERY FULL
資料來源:jiankai 大筆述
17. 從 abcd 資料表中所有的欄位找出 cdef 欄,並找有 1 或 2 字串的資料(同時搜尋兩條件)
SELECT * FROM abcd WHERE (cdef = '1') OR (cdef = '2')
18. 從 abcd 資料表中所有的欄位找出 cdef 欄,去除有 1 或 2 字串的資料(同時去除兩條件)
SELECT * FROM abcd WHERE not(cdef = '1' OR cdef = '2')
SELECT * FROM abcd where cdef not in ('1','2')
資料來源:IZAN 及 TINA
19. 從 abcd 資料表中所有的欄位找出 cdef 欄為空值的資料
SELECT * FROM abcd WHERE (cdef = '')
20. 統計abcd 資料表筆數
select count(*) from abcd
資料來源:Blues
21. 從abcd 資料表中列出前 N 筆 cdef 欄 資料(僅顯示cdef 欄資料)
select top ( N ) cdef from abcd
從abcd 資料表中列出前 N 筆資料
select top ( N ) * from abcd
資料來源:Blues
22. 從abcd 資料表中抓取 cdef 欄及ghij 資料
select cdef,ghij from abcd
23. 索引片段過多會導致資料庫讀取該table效能變差
查看索引片段情形與頁面使用飽和度
進入資料庫==>選定特定資料庫==>資料表==>選定特定資料表==>索引==>點開看該叢集==>滑鼠右鍵點屬性==>選擇片段==>這裡就可以看到片段總計及頁面飽和度
24. T-SQL指令變更資料型別
ALTER TABLE abc
ALTER COLUMN abcuid Varchar (20) NOT NULL;
變更資料表 abc中的資料欄 abcuid 的欄位長度為 20
技術提供:blues
25. 清空特定資料庫語法。這個語法會特定資料庫中的資料完全清除
TRUNCATE TABLE table_name
26. MS-SQL 語法教學站台
http://www.1keydata.com/tw/sql/sql.html
27. MS-SQL 2000 問題
當使用windws 2003 server 安裝 MS-SQL 2000,SQL 版本為 SP2或更舊,這時會造成 TCP/IP 通訊協定無法開啟的問題,這時請將SQL 2000更新到 SP4版,這個問題就會解決,詳細資料可見事件檢視器==>應用程式
28. MS-SQL 2008 無法直接編輯資料的修改方式
2k8基於安全性考量,management studio預設的編輯功能為唯讀,導致無法編輯欄位內容、欄位格式等等,需到工具 ==>選項 ==>Desigeners ==>資料表和資料庫設計工具 ==>取消“防止存儲需要資料表重建的變更”,這樣就可以編輯了
資料來源:小舖工程師 jainkai
29. MS-SQL 2000的查詢頁面
ms-sql 2000中並沒有新增查詢的項目,以提供語法寫入,需要到 工具 ==> sql query analyzer 才會開啟語法寫入頁面
註:要指定資料庫
30. 帳號權限管理
30.1. 限制讀取指定資料表(table)
建立帳號test ==>在指定資料庫(abcd),安全性中加入使用者test ==>但不提供“資料庫角色成員資格”==>到指定table(tbAabc)上按滑鼠右鍵==>屬性 ==>權限 ==>點下 搜尋 ==>瀏覽 ==>勾選指定帳號(test)==>到下表中勾選test的權限,這裡依需求勾選,towns只勾授與“選取”。設定完成後,test帳號就只能看到這個table 並對這個table執行選取的指令了
刪除方式:直接於指定資料庫安全性中刪除該使用者
31. 主機名稱與MSSQL問題
當我們在安裝完MSSQL後再變更主機名稱,會發生維護計畫無法使用的問題,因為MSSQL會抓取舊主機名稱,造成執行權限不正確,導致維護計畫無法使用,這個問題可以在事件檢視器中看到。
處理方式:打入新主機名稱或使用IP連接資料庫
32. 建立資料庫
與ACCESS、Excel表很類似,不過通常需要加上主索引
主索引 自行設定名稱 類型 bigint,自動編號 請將識別規格改為 是
資料行 自行設定名稱 類型 nchar,並設定字數
33. 單一table大小可以在該table上面按滑鼠右鍵==>屬性==>儲存體,這裡就可以看到他使用的索引空間大小,資料空間大小
34. 取出大於等於1000的數值資料
select * from abcd where defg >= 1000
註:defg欄位必需為數值資料
35. MSSQL 2008 安裝失敗
系統:windows 2008 R2 std sp1
MSSQL:MSSQL 2008 R2 ent
在安裝過程中出現了“效能計數器登入區一致性:失敗”
點選失敗後,會請我們到指定網站參考微軟的說明
連到官網後,看了一下資料,說真的以towns的資質,實在是看不懂這個文章在寫什麼,更不知道怎麼下手處理問題,但towns有在伺服器廠商安裝系統時,有發現他們使用的是英文版OS,這個也造成了系統的區域資料異常。towns 試著到 控制台==>時鐘、語言和區域中查看,發覺在 系統管理==>非Unicode程式的語言,這裡寫的是“英文(美國)”,這個資訊顯然是錯誤的,towns 將他改為“中文(繁體、台灣)後,就可以正常安裝mssql了,還好這樣就可以了,官網資料實在是太難懂了= =
發覺這個問題,是因為在cmd模式下,會出現亂碼
36. MSSQL 語法,選取時間格式
方法一
SELECT *
FROM abc
WHERE DATEPART(yy, d_date) = 2010 AND DATEPART(mm, d_date) = 12 AND DATEPART(dd, d_date) = 31
方法二(選取時間區間)
SELECT *
FROM abc
WHERE d_date BETWEEN '2010-12-31 00:00:00' AND '2010-12-31 23:59:59'
資料來源:blues大師口述
方法三(選取時間區間)
SELECT *
FROM abc
WHERE d_date < '2010-12-31 00:00:00'
37. 關於LDF檔異常長大的原因
使用索引重建,會造成LDF檔變大,如果有需要重建,建議先看看LDF檔是否很大了,如果很大,要先壓縮後再執行
38. MS-SQL 2008 使用備維護計劃排定自動備份發生失敗問題
towns架設的一台SQL-server發生了自動備份失敗問題,系統會提示查看記錄檔,因為towns的計劃中,有多個子計劃,所以要開記錄檔,要到Agent中查看,錯誤圖片(sqlbkerr.jpg)
查看記錄檔:到SQL Server Agent ==> 作業 ==> 到指定的作業中按滑鼠右鍵 ==> 點 檢視記錄
在記錄中看到以下錯誤,這個問題應該是安裝時少裝了Integration Services造成
39. 更新統計資料及更新使用方式計數器
在SQL 2000中容易發生因為資料庫轉移或昇級後,資料庫讀取延遲的問題,我們需要更新更新統計資料及更新使用方式計數器
更新統計資料語法
USE [資料庫];
GO
EXEC sp_updatestats
更新使用方式計數器
USE [資料庫]
DBCC UPDATEUSAGE (0);
GO
資料來源:kelly大師
40. MS-SQL 混合驗證模式(2005)
在安裝MSSQL 的過程中,可以選SQL server驗證或windows驗證模式,如果選了windows驗證模式,他就不需要打入sa的密碼,這也會造成之後使用SQL Server Management Studio,無法使用 SQL server驗證 模式登入,就算是建了一個帳號,也無法登入。如果要開放 SQL server驗證 登入,有兩個步驟
1. 使用 SQL Server Management Studio 登入後,在 物件總管,伺服器名稱上按滑鼠右鍵 ==> 屬性 ==> 安全性 ==> 伺服器驗證,點選 SQL server驗證及windows驗證模式,完成後重新啟動 SQL
2. 使用 ALTER LOGIN 語法,啟用sa 帳號,在password後面請自行打入sa 密碼
ALTER LOGIN sa ENABLE ;
GO
ALTER LOGIN sa WITH PASSWORD = '' ;
GO
完成上述兩步驟後,就可以使用 SQL server驗證 模式登入了
資料來源:http://missice.pixnet.net/blog/post/24136664-ms-sql-server-%E8%AE%8A%E6%9B%B4%E4%BC%BA%E6%9C%8D%E5%99%A8%E9%A9%97%E8%AD%89%E6%A8%A1%E5%BC%8F missice大的blog
註:towns在設時,沒有注意到sa 帳號是否存在,如果存在,第二步驟是否可以用滑鼠啟用sa 帳號就達成了呢?^^ 如果有朋友遇到,再試一下結果,可以的話也告訴towns哦!^^
41. 資料備份還原問題
towns 習慣使用備份還原方式來轉移資料庫,好處是資料完整、結構完整。缺點是 1.不同版本的資料庫還原會出問題(如2k8還原到2k3或2k8 R2還原到 2k8),2. 帳號會同時還原進來,需刪除重建。
問題一處理方式:
1. 將結構及資料同時匯出為語法(以2k8 R2為例)
開啟SQL Server Management ==> 指定資料庫 按滑鼠右鍵 ==> 工作 ==> 產生指令碼 ==> 下一步 ==> 這裡可以依需求選擇 完整指令碼或選取特定資料庫物件指令碼 ==> towns 只需要資料表 ==> 輸出類型 選將指令碼儲存到特定位置,儲存至檔案,單一檔案,點選進階,將 要編寫的指令類型選擇,選擇結構描述及資料(這個選擇有三種,依需求選,也可以選擇單一資料表),指定檔名及存放位置 ==> 下一步 ==> 下一步 ,就會開始編寫指令碼了。產生的指令碼,就可以在多數MSSQL版本中使用
註1:在2k8中,點選進階,將 編寫資料指令碼 設為 True
2. 請參考第9點
42. 在執行ldf 檔備份壓縮後,出現了 [資料庫名稱](正在還原...)的情形
towns在一次執行ldf 檔備份壓縮後,出現了 [資料庫名稱](正在還原...)的情形,這時網站是無法正常讀取資料庫的,必需使用語法,讓資料庫狀態回到一般,才能正常讀取
處理方式:
使用語法
RESTORE DATABASE [資料庫名稱]
WITH RECOVERY
後,再重整資料庫,就會回到一般狀態
資料來源:德瑞克大的blog http://sharedderrick.blogspot.tw/2008/12/sql-server-restoring.html
43. MSSQL 2008 R2 資料庫 ==> MSSQL 2008 資料庫
這是41點的補充,單純說明 2k8 R2 ==> 2k8
在41點 towns 說明了將資料及結構同時匯出的方式,但這次做了這個動作,出來的sql檔有1GB之大,這會連將檔案傳到主機都成問題,而且,也不能保證能寫入資料庫,這次的方式是使用匯出匯入方式 ,直接將資料及結構產生
流程:
1. 建立一台MSSQL 2K8 R2主機,並還原資料庫
2. 於目標主機中新增指定資料庫,此時資料庫是空的
3. 使用匯入匯出方式,將新資料匯入目標主機中的指定資料庫,並新增結構。此時不要將view表一併匯入
4. 使用匯出匯入方式,將view表結構匯出
5. 到目標主機中,使用語法產生view表結構
6. 建立帳號
這樣的做法可以減少因型態不同、驗證錯誤所產生資料庫匯出匯入的問題
44. 只使用MDF檔來還原資料庫的方式
資料來源:UBLink技術團隊討論區 Kao大 回應 http://ns2.ublink.org/phpbb/viewtopic.php?t=1637
towns一字不漏的將Kao大的回應直接放上來,主要是為了避免towns修改後出現錯誤。如不適合放於此,請通知towns刪除,謝謝 ^^
當資料庫缺少了交易記錄檔時
1.在 SQL 2000 時請利用附加資料庫的方式重新Create 交易記錄檔
2.在 SQL 2005 是亦是利用附加資料庫的方式但在附加時要將對話框的交易檔路 徑刪除即可
3.若在SQL 2000無法完成附加資料庫時可利用以下步驟完成交易記錄檔建立
A.在SQL Server Enterprise Manager裏面先建立資料庫如(test)。
B.停掉資料庫伺服器。
C.將資料庫的日誌檔test_log.ldf刪除,用要恢復的資料庫mdf檔蓋掉剛才建立的資料庫資料檔案test_data.mdf。
D.啟動資料庫伺服器。這時候不能對此資料庫進行任何操作。
E.設置資料庫允許直接作業系統表。可以使用如下語句來實現。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
F.設置test為緊急修復模式
update sysdatabases set status=-32768 where dbid=DB_ID('test')
G.重建資料庫日誌檔
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
此時請確認無人在使用資料庫包括SQL Server Enterprise Manager
I.設置資料庫為正常狀態
sp_dboption 'test','dbo use only','false'
J.將步驟E中設置的“允許對系統目錄直接修改”一項恢復。sp_configure 'allow updates',0
go
reconfigure with override
go
J.重新啟動SQL SERVER
45. MSSQL 2k8 R2 與 SQLEXPRESS 2k8 R2 的差別
硬體及檔案限制
資料來源:
保哥的blog http://blog.miniasp.com/post/2008/09/27/SQL-Server-Oracle-Features-Comparison-Chart.aspx
官方資料:http://msdn.microsoft.com/en-us/library/cc645993.aspx
46. ActiveX 控制項錯誤(MSSQL 2008 R2)
在 管理 ==> 維護計劃 ==> 編輯指定工作,突然出現這樣的錯誤
小舖Ada大提供了一個方法,目前正在測試中
資料來源:
小舖討論區http://www.blueshop.com.tw/board/FUM20041006152735ZFS/BRD201212181018348FH.html
微軟technet說明
http://technet.microsoft.com/zh-tw/library/dd631688%28v=ws.10%29.aspx
補充:
目前有得到幾種方式,都是與大家討論而來的,謝謝大大們的相挺
1. 設定 ActiveX 安裝程式服務。
這是由Ada大提供的方式,不過,不知道是towns設定錯誤還是其他原因,設完後是無效的。towns也看過其他主機的設定,都是用預設值(尚未設定)
towns的設定可參考小舖討論區
2. MSSQL中毒,需要重灌。
這個回應讓towns不知道該怎麼做呢! ^^",說不定是最好的方式 = =
3. 微軟技支
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q298725
其中提到的機碼(HKLM/Software/Microsoft/Ole/DefaultAccessPermission)在towns的系統中,並不存在,這個應該是因為towns並沒有設定DCOMcnfg utility的關係
4. 微軟討論區
http://social.technet.microsoft.com/Forums/en-US/winservergen/thread/ceaccde6-291c-4084-8a2c-f52e28343e98/
這個方式看來與第3個方式類似,都是提到DCOMcnfg的設定問題
5. 微軟MSDN
http://msdn.microsoft.com/zh-tw/library/hh710041.aspx
這是由richardsuma大提供的資訊。這是要確認帳號的伺服器角色是否有勾選 sysadmin,towns查看後,是有勾的
6. UAC開太高了
這是D大協助查詢的,D大自己測試,似乎不是這個問題,但,towns該試試。還是失敗了 = =
資料庫欄位描述查詢很多時候towns需要寫出欄位描述,在沒方法以前,就是一個一個看,現在有兩個好方法
一、半手動查詢
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG = '資料庫' AND TABLE_TYPE='BASE TABLE'
ORDER BY TABLE_NAME
列出所有資料表名稱
SELECT * FROM ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table', '資料表名稱', 'column', NULL)
列出指定資料表資訊
這個方式需透過文字編輯器將資料表名稱一一寫入第二個語法
方式提供:bobo大
二、全自動查詢
這個是孤影大的研究,謝謝孤影大
http://www.dotblogs.com.tw/ajun/archive/2008/02/01/1044.aspx
這個T-SQL,執行後,會已html語法的方式呈顯哦!
檔案下載:Script_to_generate_DB_Document_Version_1.1
檔案提供:JK大
MSSQL 2008 R2 ==> MSSQL 2008或2005
方法一、使用產生指令碼方式並只匯出資料
指定資料庫 按滑鼠右建 ==> 工作 ==> 產生指令碼 ==> 選擇物件中 選 選取資料庫特定物件 勾選資料表 ==> 設定指令碼編寫選項 在儲存至檔案 點選 進階 將 要編寫指令碼的資料類型 選僅資料,這時產生的就只有資料了
方法二、將資料匯出成mdb檔,再匯入資料庫
資料庫結構比對及匯出差異結構(或直接更新)很多時候程式在開發時,客戶會同步測試及寫入資料,這的會造成開發版的資料庫結不同,開發過程中因為變動結構很多不可能一一寫出Schema,而且又不可以覆蓋客戶端的資料庫,因為,已經有重要資料了 = =,這時可以使用VS2010中工具 資料結構比對 ,下面說明使用方式
開啟 VS2010 (版本必需在 Pre以上)==> 資料 ==> 結構描述比較 ==> 新增資料結構描述比較 ==> 點選資料庫 ,並新增連接 ==> 打入伺服器名稱、打入帳密驗證、選取資料庫(兩邊都要做) ==> 到 結構描述比較設定 按下 選項 做進階設定 ==> 比較選項 中的設定,可以參考保哥的blog,有說明,設定完成後,按下確定,就開始比對 資料庫結構了,比對完成後,可以使用上方的功能 寫入更新 或 匯出至編輯器 的方式,將資料庫結構同步了
補充:進階設定要勾選的項目
一般,比較選項
1. 忽略 ANSI_NULLS
2. 忽略 QUOTED_IDENTIFIERS
3. 忽略檔案和記錄檔的檔名和路徑
物件型別
1. 勾選 SQL 檔案 (SQL Files)
2. 勾選 角色成員資格 (Role Memberships)
3. 勾選 使用者 (Users)
4. 勾選 登入 (Logins)
5. 勾選 資料庫角色 (Database Roles)
6. 勾選 檔案群組 (Filegroups)
7. 取消勾選 擴充屬性 (Extended Properties)
8. 勾選 權限 (Permissions)
資料來源:保哥的blog http://blog.miniasp.com/post/2010/12/01/Visual-Studio-2010-Database-Project-Schema-Compare-Options.aspx
1. 指令管理資料庫關閉與啟動
net stop mssqlserver /y <==使用net 指令停止mssqlserver服務,並同時同意停止其他相關服務
net start sqlserveragent <==使用net 指令啟動sqlserveragent服務,系統會自動將mssqlserver 啟動
net stop 及 start 主要是用來停止與啟動系統中的服務,所有的服務都可以透過這樣的方式來管理,另一個towns常用的是IIS的管理。
注意:後面加的服務名稱並不是在“服務”中的“顯示名稱”,而是“服務名稱”
2. 列出abc所有的table
sp_tables @table_name = '%',@table_owner = 'dbo',@table_qualifier = 'abc'
sp_tables @TABLE_TYPE= "'table'" <== 列出所有table 名稱
sp_tables @table_name = '%' <== 列出所有table及veiw 名稱
3. 選擇所有欄位從 abcd 資料表中找出 cdef 欄,並找有towns完全相同的字串(單一條件絕對搜尋,顯示所有欄位)
select * from abcd where cdef = 'towns'
選擇cdef,aaa欄位從 abcd 資料表中找出 cdef 欄,並找有towns完全相同的字串(單一條件絕對搜尋,只顯示兩欄位)
select cdef,aaa from abcd where cdef ='towns'
4. 查尋資料庫版本
select @@version
5. 刪除特定資料表
delete from abc <==刪除abc資料表中的資料
delete
FROM abc
WHERE (abcde > '2013-03-07 15:37:00')
and abcde < '2013-03-07 15:57:00'
刪除abc資料表中 欄位abcde時間為 2013-03-07 15:37:00 ~ 15:57:00間的資料
6. MSSQL 2005 資料庫 <==> MSSQL 2005 Express 資料庫
MSSQL 2005 Express ==> MSSQL 2005。直接附加即可
MSSQL 2005 ==> MSSQL 2005 Express
1. 由MSSQL 2005 匯出資料庫結構。在指定資料庫按滑鼠右鍵==>工作==>產生指令碼==>下一步==>確認是否為選擇的資料庫,下一步==>在選擇指令碼選項中,不需做特別修改,下一步==>選擇物件類型,僅選擇資料表及檢視,下一步==>選擇資料表,全選,下一步==>選擇檢視,全選,下一步==>輸出選項,這裡依需求選擇,下一步(towns多選寫指令碼至檔案),下一步==>設定檔名及路徑
,存檔,下一步==>完成
註:對該資料庫需要有存取權限,如果只有讀取權限,匯出時會出現錯誤
2. 將結構檔匯入 MSSQL 2005 Express。開啟Managemant==>檔案==>開啟==>檔案==>選擇剛剛匯出的檔案==>這時系統會要求打入帳密(確認連結的資料庫是否正確,帳密需有寫入權限)==>此時結構語法已載入==>點入語法,並確認要載入的資料庫是否正確(系統會預設載入為master)==>執行==>結構載入
3. 將資料匯入 MSSQL 2005 Express。
3.1.連結資料庫匯入
開啟Managemant==>選擇資料來源(確認資料來源及登入資料,一般towns會使用ReadOnly 帳號,以避免錯誤)==>選擇目的地(確認目的地及登入資料,這裡需有寫入權限)==>指定資料表複製或查詢,towns通常是要複製,選從一或多個資料表或檢視複製資料,下一步==>全選所有的資料表及檢示,編輯,選刪除資料表中的資料列,並取消檢視,下一步==>立即執行==>確認工作==>完成
3.2.可用匯出檔案方式,將資料再匯入。
開啟Managemant==>選擇資料來源(確認資料來源及登入資料,一般towns會使用ReadOnly 帳號,以避免錯誤)==>選擇目的地(選擇excel)==>選擇匯出路徑並打入檔案名稱==>地區設定及字碼頁需依資料庫編碼決定 ==>從一或多個資料表或檢視複製資料 ==>下一步(這裡towns使用預設值)
注意事項:做匯出匯入的動作是非常危險的,方向一錯資料就不見了,建議在執行時,該備份的一定要先備份,不要嫌麻煩
技術指導:藍色小舖資深工程師 IZAN
補充說明:最近一次的測試,是可以直接使用MSSQL 2005 ent 備份出來的檔案,直接還原到 MSSQL 2005 Express版 中SQL Server Management Studio Express為 SP3版
7. MS SQL 2005 TCP/IP協定啟用
到開始Microsoft SQL 2005==>組態工具==>進入 SQL Server組態管理員(有些會出現英文)==>選擇 SQL Server 2005 網路組態==> 這裡可能會出現SQL及SQLEXPRESS,看哪個要開就開哪個 ==>選擇TCP/IP ==>IP位址==>確認IPALL中TCP通訊埠,是否有開起埠號(如預設值1433),在開啟後,要重新啟動SQL Server的服務,並使用netstat -an來檢查是否有開啟1433 port
8. 加快資料庫讀取速度,利用先將資料庫放到記憶體中,加快讀取速度
相關資料:http://blog.miniasp.com/post/2009/11/SQL-Server-Performance-Tuning-Caching-commonly-used-tables.aspx(感謝will大無私分享)
9. 在MSSQL資料庫轉移時,常常會遇到的問題
9.1. 資料庫使用還原或附加後,因為使用者不存在而造成網站無法正確讀取資料庫( 如圖nouser),此時需刪除並重建使用者
9.2. 要刪除使用者,重建時,發生使用者無法刪除,導致無法重建該使用者。常見原因有
9.2.1. 在該資料庫==>安全性==>結構描述中,有該使用者的名稱
處理方式:到結構描述中,將該使用者刪除,如果無法刪除,就與下面兩點有關
9.2.2. 在該資料庫==>資料表==>結構描述中,有該使用者的名稱(如圖table)
9.2.3. 在該資料庫==>檢示==>結構描述中,有該使用者的名稱(如圖view)
2000處理方式:手動將結構描述改為dbo
開啟SQL Server Enterprice Manager==>選擇該資料庫==>選擇資料表,其結構
描述為使用者名稱的==>到資料表上按滑鼠右鍵,選擇設計資料表==>按左上方“資料表與索引屬
性”(如圖property)==>變更擁有者為dbo(如圖property-1),存檔==>擁有者就改為dbo,就可
刪除帳號即可
2005處理方式:手動將結構描述改為dbo
開啟Microsoft SQL Server Management Studio==>選擇該資料庫==>選擇資料表,其結構
描述為使用者名稱的==>到資料表上按滑鼠右鍵,選擇設計==>在屬性中選結構描述==>變更擁有者
為dbo(如圖2005property),存檔==>擁有者就改為dbo,就可刪除帳號即可
2008處理方式:手動將結構描述改為dbo
開啟Microsoft SQL Server Management Studio==>選擇該資料庫==>選擇資料表,其結構
描述為使用者名稱的==>到資料表上按滑鼠右鍵,選擇設計==>在屬性中選結構描述==>變更擁有者
為dbo(如圖2008property),存檔==>擁有者就改為dbo,就可刪除帳號即可
註:SQL Server Management Studio 預設並不開啟屬性視窗,按F4就可開啟
技術指導:藍色小舖資深工程師 IZAN
補充:使用者擁有預存程序(如圖storedprocedure2),這個也會造成無法刪除使用者的問題,這時必須重建預設程序才能解決該問題。在預存程序上按滑鼠右鍵==>編寫預存程序指令碼為==>CREATE至==>產生指令碼,再將指令碼中的擁有者改為dbo,刪除該程序後重建這個預存程序。
技術指導:tina
10. 當同台主機安裝了多個MSSQL(如有有安裝2000、2005 Express、2005等)要注意
10.1.在進入SQL時,要選擇正確的版本
10.2.在新增帳號時,請使用2005來新增及指定資料庫,否則會發生帳號無法正常讀取的問題
11. 從 abcd 資料表中cdef 欄,找出有張及張*文的字串(兩條件模糊搜尋)
select * from abcd where (cdef LIKE '張%') OR (cdef LIKE '張%文')
12. 查詢T-SQL語法
sp_help
13. 列出資料庫清單,列出後再使用右鍵儲存結果為單一 CSV檔
13.1. 列出資料庫所有狀態
sp_helpdb
13.2. 僅列出資料庫名稱
USE master
SELECT dbid, DB_NAME(dbid) AS DB_NAME
FROM sysdatabases
ORDER BY dbid
資料來源:blues及tina口述
14. 查看每一個SQL語法的使用記錄
使用SQL Server Profiler 中新增追蹤,可以看到資料庫正在存取的情形
read ==>讀取硬碟資料筆數
write ==>寫入硬碟資料筆數
duration ==>經過時間,時間太長就表示讀取/寫入硬碟資料時很長,這是造成資料庫回應緩慢的原因(1000=1秒)
技術指導:藍色小舖資深工程師 IZAN
15. access 2007與資料庫連結(圖解)
1. 匯入mssql 資料:外部資料==>其他==>ODBC資料庫(如圖mdb1.jpg)
2. 選擇匯入方式,第一項為將資料cp一份到電腦中,第二項為連結同步,取得最新資料(如圖mdb2.jpg)
3. 選擇資料來源,請新增一個 DSN資料來源(如圖mdb3.jpg)
4. 選擇 SQL server 下一步(如圖mdb4.jpg),將DSN指定存放位置及設定名稱 下一步(如圖mdb5.jpg)
5. 與伺服器建立連結,打入伺服器名稱或IP(如圖mdb6.jpg)
6. 選擇連入帳戶,選擇第二項者,需打入帳號及密碼(如圖mdb7.jpg)
7. 指定取得資料庫,勾選變更預設資料庫即可選擇(如圖mdb8.jpg)
8. 這一塊使用預設值,不需變更(如圖mdb9.jpg),summary(如圖mdb10.jpg),完成後需打入帳密登入資料庫(如圖mdb11.jpg)
9. 選擇要匯入的 table(如圖mdb12.jpg),完成匯入
補充:關於access 2010新檔案格式問題
當使用access 2010匯出資料並存檔時,檔案格式為 *.accdb,如果要將檔案存為 *.mdb,需使用 儲存並發佈 的方式,這時就可以將檔案另存成 mdb格式了
16. 關於資料庫 ldf 檔非常大,但卻無法壓縮的問題
towns管理的伺服器中,有些資料庫的Log檔,實在是大的離譜,但在執行備份壓縮後,卻不見Log檔變小(如圖mssqlLog2.jpg),雖然說可用空間明顯加大(如圖mssqlLog.jpg),但檔案事實上是沒變小的,目前towns 將自動壓縮功能啟用(如圖mssqlLog3.jpg)並執行排程備份壓縮,是否能成功將 ldf 檔變小,今天晚上就可以知道了。
很可惜,ldf 檔並沒有變小,看來在動作中的資料庫,要壓縮是個問題呢
16.1.經過IZAN指導,要連續兩次壓縮,才能將ldf 檔變小,而且必需使用維護計畫來執行才能有效壓縮,可以先做一次手動備份LDF檔,再用計畫做備份壓縮,也可以有效處理
16.2.不需要設定自動壓縮功能(如圖mssqlLog3.jpg),也能有效壓縮
技術指導:藍色小舖資深工程師 IZAN
相關資料:http://ithelp.ithome.com.tw/question/10028911
補充1:LDF 檔有多大,就需要給他一個多大的空間來備份,如LDF約10GB,硬碟空間就要 > 10GB
補充2:使用T-SQL指令處理
T-SQL語法如下:
1. 截斷交易記錄檔:將資料庫「復原模式」改為「簡單」,即可即斷交易記檔
T-SQL:ALTER DATABASE 資料庫名稱 SET RECOVERY SIMPLE
2. T-SQL:SP_HELPDB 資料庫名稱 此時可查得 ldf 檔對應到的邏輯名稱(name),一般會是"資料庫名稱_log",但若之前是從備份資料還原到不同名稱的資料庫,邏輯名稱(name)就可能不一樣。
壓縮交易記錄檔
3. 執行以下指令後,應該可以發現ldf的檔案大小縮小成2MB
T-SQL:use 資料庫名稱 GO DBCC SHRINKFILE('ldf的邏輯名稱',2)
4. 將資料庫「復原模式」改回「完整」
T-SQL: ALTER DATABASE 資料庫名稱 SET RECOVERY FULL
資料來源:jiankai 大筆述
17. 從 abcd 資料表中所有的欄位找出 cdef 欄,並找有 1 或 2 字串的資料(同時搜尋兩條件)
SELECT * FROM abcd WHERE (cdef = '1') OR (cdef = '2')
18. 從 abcd 資料表中所有的欄位找出 cdef 欄,去除有 1 或 2 字串的資料(同時去除兩條件)
SELECT * FROM abcd WHERE not(cdef = '1' OR cdef = '2')
SELECT * FROM abcd where cdef not in ('1','2')
資料來源:IZAN 及 TINA
19. 從 abcd 資料表中所有的欄位找出 cdef 欄為空值的資料
SELECT * FROM abcd WHERE (cdef = '')
20. 統計abcd 資料表筆數
select count(*) from abcd
資料來源:Blues
21. 從abcd 資料表中列出前 N 筆 cdef 欄 資料(僅顯示cdef 欄資料)
select top ( N ) cdef from abcd
從abcd 資料表中列出前 N 筆資料
select top ( N ) * from abcd
資料來源:Blues
22. 從abcd 資料表中抓取 cdef 欄及ghij 資料
select cdef,ghij from abcd
23. 索引片段過多會導致資料庫讀取該table效能變差
查看索引片段情形與頁面使用飽和度
進入資料庫==>選定特定資料庫==>資料表==>選定特定資料表==>索引==>點開看該叢集==>滑鼠右鍵點屬性==>選擇片段==>這裡就可以看到片段總計及頁面飽和度
24. T-SQL指令變更資料型別
ALTER TABLE abc
ALTER COLUMN abcuid Varchar (20) NOT NULL;
變更資料表 abc中的資料欄 abcuid 的欄位長度為 20
技術提供:blues
25. 清空特定資料庫語法。這個語法會特定資料庫中的資料完全清除
TRUNCATE TABLE table_name
26. MS-SQL 語法教學站台
http://www.1keydata.com/tw/sql/sql.html
27. MS-SQL 2000 問題
當使用windws 2003 server 安裝 MS-SQL 2000,SQL 版本為 SP2或更舊,這時會造成 TCP/IP 通訊協定無法開啟的問題,這時請將SQL 2000更新到 SP4版,這個問題就會解決,詳細資料可見事件檢視器==>應用程式
28. MS-SQL 2008 無法直接編輯資料的修改方式
2k8基於安全性考量,management studio預設的編輯功能為唯讀,導致無法編輯欄位內容、欄位格式等等,需到工具 ==>選項 ==>Desigeners ==>資料表和資料庫設計工具 ==>取消“防止存儲需要資料表重建的變更”,這樣就可以編輯了
資料來源:小舖工程師 jainkai
29. MS-SQL 2000的查詢頁面
ms-sql 2000中並沒有新增查詢的項目,以提供語法寫入,需要到 工具 ==> sql query analyzer 才會開啟語法寫入頁面
註:要指定資料庫
30. 帳號權限管理
30.1. 限制讀取指定資料表(table)
建立帳號test ==>在指定資料庫(abcd),安全性中加入使用者test ==>但不提供“資料庫角色成員資格”==>到指定table(tbAabc)上按滑鼠右鍵==>屬性 ==>權限 ==>點下 搜尋 ==>瀏覽 ==>勾選指定帳號(test)==>到下表中勾選test的權限,這裡依需求勾選,towns只勾授與“選取”。設定完成後,test帳號就只能看到這個table 並對這個table執行選取的指令了
刪除方式:直接於指定資料庫安全性中刪除該使用者
31. 主機名稱與MSSQL問題
當我們在安裝完MSSQL後再變更主機名稱,會發生維護計畫無法使用的問題,因為MSSQL會抓取舊主機名稱,造成執行權限不正確,導致維護計畫無法使用,這個問題可以在事件檢視器中看到。
處理方式:打入新主機名稱或使用IP連接資料庫
32. 建立資料庫
與ACCESS、Excel表很類似,不過通常需要加上主索引
主索引 自行設定名稱 類型 bigint,自動編號 請將識別規格改為 是
資料行 自行設定名稱 類型 nchar,並設定字數
33. 單一table大小可以在該table上面按滑鼠右鍵==>屬性==>儲存體,這裡就可以看到他使用的索引空間大小,資料空間大小
34. 取出大於等於1000的數值資料
select * from abcd where defg >= 1000
註:defg欄位必需為數值資料
35. MSSQL 2008 安裝失敗
系統:windows 2008 R2 std sp1
MSSQL:MSSQL 2008 R2 ent
在安裝過程中出現了“效能計數器登入區一致性:失敗”
點選失敗後,會請我們到指定網站參考微軟的說明
連到官網後,看了一下資料,說真的以towns的資質,實在是看不懂這個文章在寫什麼,更不知道怎麼下手處理問題,但towns有在伺服器廠商安裝系統時,有發現他們使用的是英文版OS,這個也造成了系統的區域資料異常。towns 試著到 控制台==>時鐘、語言和區域中查看,發覺在 系統管理==>非Unicode程式的語言,這裡寫的是“英文(美國)”,這個資訊顯然是錯誤的,towns 將他改為“中文(繁體、台灣)後,就可以正常安裝mssql了,還好這樣就可以了,官網資料實在是太難懂了= =
發覺這個問題,是因為在cmd模式下,會出現亂碼
36. MSSQL 語法,選取時間格式
方法一
SELECT *
FROM abc
WHERE DATEPART(yy, d_date) = 2010 AND DATEPART(mm, d_date) = 12 AND DATEPART(dd, d_date) = 31
方法二(選取時間區間)
SELECT *
FROM abc
WHERE d_date BETWEEN '2010-12-31 00:00:00' AND '2010-12-31 23:59:59'
資料來源:blues大師口述
方法三(選取時間區間)
SELECT *
FROM abc
WHERE d_date < '2010-12-31 00:00:00'
37. 關於LDF檔異常長大的原因
使用索引重建,會造成LDF檔變大,如果有需要重建,建議先看看LDF檔是否很大了,如果很大,要先壓縮後再執行
38. MS-SQL 2008 使用備維護計劃排定自動備份發生失敗問題
towns架設的一台SQL-server發生了自動備份失敗問題,系統會提示查看記錄檔,因為towns的計劃中,有多個子計劃,所以要開記錄檔,要到Agent中查看,錯誤圖片(sqlbkerr.jpg)
查看記錄檔:到SQL Server Agent ==> 作業 ==> 到指定的作業中按滑鼠右鍵 ==> 點 檢視記錄
在記錄中看到以下錯誤,這個問題應該是安裝時少裝了Integration Services造成
39. 更新統計資料及更新使用方式計數器
在SQL 2000中容易發生因為資料庫轉移或昇級後,資料庫讀取延遲的問題,我們需要更新更新統計資料及更新使用方式計數器
更新統計資料語法
USE [資料庫];
GO
EXEC sp_updatestats
更新使用方式計數器
USE [資料庫]
DBCC UPDATEUSAGE (0);
GO
資料來源:kelly大師
40. MS-SQL 混合驗證模式(2005)
在安裝MSSQL 的過程中,可以選SQL server驗證或windows驗證模式,如果選了windows驗證模式,他就不需要打入sa的密碼,這也會造成之後使用SQL Server Management Studio,無法使用 SQL server驗證 模式登入,就算是建了一個帳號,也無法登入。如果要開放 SQL server驗證 登入,有兩個步驟
1. 使用 SQL Server Management Studio 登入後,在 物件總管,伺服器名稱上按滑鼠右鍵 ==> 屬性 ==> 安全性 ==> 伺服器驗證,點選 SQL server驗證及windows驗證模式,完成後重新啟動 SQL
2. 使用 ALTER LOGIN 語法,啟用sa 帳號,在password後面請自行打入sa 密碼
ALTER LOGIN sa ENABLE ;
GO
ALTER LOGIN sa WITH PASSWORD = '' ;
GO
完成上述兩步驟後,就可以使用 SQL server驗證 模式登入了
資料來源:http://missice.pixnet.net/blog/post/24136664-ms-sql-server-%E8%AE%8A%E6%9B%B4%E4%BC%BA%E6%9C%8D%E5%99%A8%E9%A9%97%E8%AD%89%E6%A8%A1%E5%BC%8F missice大的blog
註:towns在設時,沒有注意到sa 帳號是否存在,如果存在,第二步驟是否可以用滑鼠啟用sa 帳號就達成了呢?^^ 如果有朋友遇到,再試一下結果,可以的話也告訴towns哦!^^
41. 資料備份還原問題
towns 習慣使用備份還原方式來轉移資料庫,好處是資料完整、結構完整。缺點是 1.不同版本的資料庫還原會出問題(如2k8還原到2k3或2k8 R2還原到 2k8),2. 帳號會同時還原進來,需刪除重建。
問題一處理方式:
1. 將結構及資料同時匯出為語法(以2k8 R2為例)
開啟SQL Server Management ==> 指定資料庫 按滑鼠右鍵 ==> 工作 ==> 產生指令碼 ==> 下一步 ==> 這裡可以依需求選擇 完整指令碼或選取特定資料庫物件指令碼 ==> towns 只需要資料表 ==> 輸出類型 選將指令碼儲存到特定位置,儲存至檔案,單一檔案,點選進階,將 要編寫的指令類型選擇,選擇結構描述及資料(這個選擇有三種,依需求選,也可以選擇單一資料表),指定檔名及存放位置 ==> 下一步 ==> 下一步 ,就會開始編寫指令碼了。產生的指令碼,就可以在多數MSSQL版本中使用
註1:在2k8中,點選進階,將 編寫資料指令碼 設為 True
2. 請參考第9點
42. 在執行ldf 檔備份壓縮後,出現了 [資料庫名稱](正在還原...)的情形
towns在一次執行ldf 檔備份壓縮後,出現了 [資料庫名稱](正在還原...)的情形,這時網站是無法正常讀取資料庫的,必需使用語法,讓資料庫狀態回到一般,才能正常讀取
處理方式:
使用語法
RESTORE DATABASE [資料庫名稱]
WITH RECOVERY
後,再重整資料庫,就會回到一般狀態
資料來源:德瑞克大的blog http://sharedderrick.blogspot.tw/2008/12/sql-server-restoring.html
43. MSSQL 2008 R2 資料庫 ==> MSSQL 2008 資料庫
這是41點的補充,單純說明 2k8 R2 ==> 2k8
在41點 towns 說明了將資料及結構同時匯出的方式,但這次做了這個動作,出來的sql檔有1GB之大,這會連將檔案傳到主機都成問題,而且,也不能保證能寫入資料庫,這次的方式是使用匯出匯入方式 ,直接將資料及結構產生
流程:
1. 建立一台MSSQL 2K8 R2主機,並還原資料庫
2. 於目標主機中新增指定資料庫,此時資料庫是空的
3. 使用匯入匯出方式,將新資料匯入目標主機中的指定資料庫,並新增結構。此時不要將view表一併匯入
4. 使用匯出匯入方式,將view表結構匯出
5. 到目標主機中,使用語法產生view表結構
6. 建立帳號
這樣的做法可以減少因型態不同、驗證錯誤所產生資料庫匯出匯入的問題
44. 只使用MDF檔來還原資料庫的方式
資料來源:UBLink技術團隊討論區 Kao大 回應 http://ns2.ublink.org/phpbb/viewtopic.php?t=1637
towns一字不漏的將Kao大的回應直接放上來,主要是為了避免towns修改後出現錯誤。如不適合放於此,請通知towns刪除,謝謝 ^^
當資料庫缺少了交易記錄檔時
1.在 SQL 2000 時請利用附加資料庫的方式重新Create 交易記錄檔
2.在 SQL 2005 是亦是利用附加資料庫的方式但在附加時要將對話框的交易檔路 徑刪除即可
3.若在SQL 2000無法完成附加資料庫時可利用以下步驟完成交易記錄檔建立
A.在SQL Server Enterprise Manager裏面先建立資料庫如(test)。
B.停掉資料庫伺服器。
C.將資料庫的日誌檔test_log.ldf刪除,用要恢復的資料庫mdf檔蓋掉剛才建立的資料庫資料檔案test_data.mdf。
D.啟動資料庫伺服器。這時候不能對此資料庫進行任何操作。
E.設置資料庫允許直接作業系統表。可以使用如下語句來實現。
use master
go
sp_configure 'allow updates',1
go
reconfigure with override
go
F.設置test為緊急修復模式
update sysdatabases set status=-32768 where dbid=DB_ID('test')
G.重建資料庫日誌檔
dbcc rebuild_log('test','C:\Program Files\Microsoft SQL Server\MSSQL\Data\test_log.ldf')
此時請確認無人在使用資料庫包括SQL Server Enterprise Manager
I.設置資料庫為正常狀態
sp_dboption 'test','dbo use only','false'
J.將步驟E中設置的“允許對系統目錄直接修改”一項恢復。sp_configure 'allow updates',0
go
reconfigure with override
go
J.重新啟動SQL SERVER
45. MSSQL 2k8 R2 與 SQLEXPRESS 2k8 R2 的差別
硬體及檔案限制
版本
功能名稱
|
SQL Enterprise
|
SQL Standard
|
SQL Express
|
CPU使用數 | 系統最大值 | 4個 | 1個 |
RAM使用量 | 系統最大值 | 64GB | 1GB |
資料庫檔案最大值 | 524 PB | 524 PB | 10GB |
管理工具限制
更詳細的資料可參考微軟官方資料
版本
功能名稱
|
SQL Enterprise
|
SQL Standard
|
SQL Express
|
管理工使用 | Yes | Yes | Yes |
SQL CMD | Yes | Yes | Yes |
SQL Profiler(事件探查) | Yes | Yes | No |
SQL Server Agent(代理工具) | Yes | Yes | No |
資料來源:
保哥的blog http://blog.miniasp.com/post/2008/09/27/SQL-Server-Oracle-Features-Comparison-Chart.aspx
官方資料:http://msdn.microsoft.com/en-us/library/cc645993.aspx
46. ActiveX 控制項錯誤(MSSQL 2008 R2)
在 管理 ==> 維護計劃 ==> 編輯指定工作,突然出現這樣的錯誤
小舖Ada大提供了一個方法,目前正在測試中
資料來源:
小舖討論區http://www.blueshop.com.tw/board/FUM20041006152735ZFS/BRD201212181018348FH.html
微軟technet說明
http://technet.microsoft.com/zh-tw/library/dd631688%28v=ws.10%29.aspx
補充:
目前有得到幾種方式,都是與大家討論而來的,謝謝大大們的相挺
1. 設定 ActiveX 安裝程式服務。
這是由Ada大提供的方式,不過,不知道是towns設定錯誤還是其他原因,設完後是無效的。towns也看過其他主機的設定,都是用預設值(尚未設定)
towns的設定可參考小舖討論區
2. MSSQL中毒,需要重灌。
這個回應讓towns不知道該怎麼做呢! ^^",說不定是最好的方式 = =
3. 微軟技支
http://support.microsoft.com/default.aspx?scid=kb;EN-US;q298725
其中提到的機碼(HKLM/Software/Microsoft/Ole/DefaultAccessPermission)在towns的系統中,並不存在,這個應該是因為towns並沒有設定DCOMcnfg utility的關係
4. 微軟討論區
http://social.technet.microsoft.com/Forums/en-US/winservergen/thread/ceaccde6-291c-4084-8a2c-f52e28343e98/
這個方式看來與第3個方式類似,都是提到DCOMcnfg的設定問題
5. 微軟MSDN
http://msdn.microsoft.com/zh-tw/library/hh710041.aspx
這是由richardsuma大提供的資訊。這是要確認帳號的伺服器角色是否有勾選 sysadmin,towns查看後,是有勾的
6. UAC開太高了
這是D大協助查詢的,D大自己測試,似乎不是這個問題,但,towns該試試。還是失敗了 = =
資料庫欄位描述查詢很多時候towns需要寫出欄位描述,在沒方法以前,就是一個一個看,現在有兩個好方法
一、半手動查詢
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_CATALOG = '資料庫' AND TABLE_TYPE='BASE TABLE'
ORDER BY TABLE_NAME
列出所有資料表名稱
SELECT * FROM ::fn_listextendedproperty(NULL, 'user', 'dbo', 'table', '資料表名稱', 'column', NULL)
列出指定資料表資訊
這個方式需透過文字編輯器將資料表名稱一一寫入第二個語法
方式提供:bobo大
二、全自動查詢
這個是孤影大的研究,謝謝孤影大
http://www.dotblogs.com.tw/ajun/archive/2008/02/01/1044.aspx
這個T-SQL,執行後,會已html語法的方式呈顯哦!
檔案下載:Script_to_generate_DB_Document_Version_1.1
檔案提供:JK大
MSSQL 2008 R2 ==> MSSQL 2008或2005
方法一、使用產生指令碼方式並只匯出資料
指定資料庫 按滑鼠右建 ==> 工作 ==> 產生指令碼 ==> 選擇物件中 選 選取資料庫特定物件 勾選資料表 ==> 設定指令碼編寫選項 在儲存至檔案 點選 進階 將 要編寫指令碼的資料類型 選僅資料,這時產生的就只有資料了
方法二、將資料匯出成mdb檔,再匯入資料庫
資料庫結構比對及匯出差異結構(或直接更新)很多時候程式在開發時,客戶會同步測試及寫入資料,這的會造成開發版的資料庫結不同,開發過程中因為變動結構很多不可能一一寫出Schema,而且又不可以覆蓋客戶端的資料庫,因為,已經有重要資料了 = =,這時可以使用VS2010中工具 資料結構比對 ,下面說明使用方式
開啟 VS2010 (版本必需在 Pre以上)==> 資料 ==> 結構描述比較 ==> 新增資料結構描述比較 ==> 點選資料庫 ,並新增連接 ==> 打入伺服器名稱、打入帳密驗證、選取資料庫(兩邊都要做) ==> 到 結構描述比較設定 按下 選項 做進階設定 ==> 比較選項 中的設定,可以參考保哥的blog,有說明,設定完成後,按下確定,就開始比對 資料庫結構了,比對完成後,可以使用上方的功能 寫入更新 或 匯出至編輯器 的方式,將資料庫結構同步了
補充:進階設定要勾選的項目
一般,比較選項
1. 忽略 ANSI_NULLS
2. 忽略 QUOTED_IDENTIFIERS
3. 忽略檔案和記錄檔的檔名和路徑
物件型別
1. 勾選 SQL 檔案 (SQL Files)
2. 勾選 角色成員資格 (Role Memberships)
3. 勾選 使用者 (Users)
4. 勾選 登入 (Logins)
5. 勾選 資料庫角色 (Database Roles)
6. 勾選 檔案群組 (Filegroups)
7. 取消勾選 擴充屬性 (Extended Properties)
8. 勾選 權限 (Permissions)
資料來源:保哥的blog http://blog.miniasp.com/post/2010/12/01/Visual-Studio-2010-Database-Project-Schema-Compare-Options.aspx