SQL Server 2012實施與管理實戰指南(筆記)——Ch5啓動SQL Server服務和數據庫

5.啓動SQL Server服務和數據庫

在數據庫和服務啓動過程當中,常常會出現的問題:html

1.SQL Server實例沒法正常啓動node

2.系統數據庫沒法正常啓動sql

3.網絡配置失敗數據庫

4.用戶數據庫沒法啓動windows

5.集羣環境下SQL Server資源沒法保持在線服務器

目錄網絡

5.啓動SQL Server服務和數據庫... 1session

5.1 SQL Server服務啓動步驟... 1多線程

5.1.1 從註冊表中讀取SQL Server啓動信息... 1app

5.1.2 檢查硬件,配置內存和CPU.. 2

5.1.3 數據庫啓動... 3

5.1.4 準備網絡... 4

5.2 數據庫狀態切換... 5

5.2.1 Recovering. 5

5.2.2 Online. 6

5.2.3 RECOVERY PENDING.. 6

5.2.4 SUSPECT. 6

5.2.5 EMERGENCY. 6

5.2.6 RESTORING.. 6

5.2.7 Offline. 6

5.3 數據庫長時間處於RECOVERING狀態... 7

5.3.1 多線程並行處理重作和回滾... 7

5.3.2 延遲事務... 7

5.4 數據庫沒法啓動的常見問題... 7

5.4.1 Master數據庫不能啓動... 7

5.4.2 資源數據庫... 7

5.4.3 model數據庫... 8

5.4.4 tempdb數據庫... 8

5.4.5 戶數據庫... 8

5.5 集羣環境下,數據庫資源不能ONLINE的常見問題... 10

 

 

5.1 SQL Server服務啓動步驟

5.1.1 從註冊表中讀取SQL Server啓動信息

Sqlservr.exe啓動會去註冊表中找本身所在實例的註冊表信息。這些配置信息存放在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.X\MSSQLServer下。有幾個比較重要的信息:

1.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.X\MSSQLServer下,LoginMode:表示是windows驗證仍是混合驗證,Audit Level:設置是否記錄用戶登陸信息。

2.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.X\MSSQLServer \Parameters下是實例的啓動參數

3.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.X\MSSQLServer \SuperSocketNetLib下記錄了監聽的網絡和訪問方式的。

5.1.1.1 啓動帳號的權限

因爲要讀取註冊表信息和SQL Server的資源文件,須要啓動服務帳號有很足夠的權限。那麼沒法啓動實例,甚至連errorlog都沒法啓動。

可使用Process Monitor進行監控。若是發現有ACCESS DENIED那麼說明有權限問題。

5.1.1.2 日誌文件和文件夾訪問問題

若是SQL Server要啓動,必須正確的建立出日誌文件,若是註冊表內-e參數指定的不夠正確就會出現報錯,沒法啓動。

5.1.2 檢查硬件,配置內存和CPU

等建立出errorlog以後,全部的啓動過程就能夠從errorlog中看出來了。

Errorlog先會打印出SQL Server版本號和Windows版本號,啓動參數和進程基本信息:

2014-05-04 14:42:07.05 Server      Microsoft SQL Server 2014 - 12.0.2000.8 (X64)

         Feb 20 2014 20:04:26

         Copyright (c) Microsoft Corporation

         Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)

 

2014-05-04 14:42:07.08 Server      UTC adjustment: 8:00

2014-05-04 14:42:07.08 Server      (c) Microsoft Corporation.

2014-05-04 14:42:07.08 Server      All rights reserved.

2014-05-04 14:42:07.08 Server      Server process ID is 4252.

2014-05-04 14:42:07.08 Server      System Manufacturer: 'System manufacturer', System Model: 'System Product Name'.

2014-05-04 14:42:07.09 Server      Authentication mode is MIXED.

2014-05-04 14:42:07.10 Server      Logging SQL Server messages in file 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log\ERRORLOG'.

2014-05-04 14:42:07.10 Server      The service account is 'FanrCo-PC\Administrator'. This is an informational message; no user action is required.

2014-05-04 14:42:07.10 Server      Registry startup parameters:

          -d C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\master.mdf

          -e C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log\ERRORLOG

          -l C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\mastlog.ldf

2014-05-04 14:42:07.10 Server      Command Line Startup Parameters:

          -s "MSSQLSERVER"

以後或讀取出服務器的配置信息,包括處理器和內存,以及進程的優先級:

2014-05-04 14:42:08.73 Server      SQL Server detected 1 sockets with 2 cores per socket and 2 logical processors per socket, 2 total logical processors; using 2 logical processors based on SQL Server licensing. This is an informational message; no user action is required.

2014-05-04 14:42:08.73 Server      SQL Server is starting at normal priority base (=7). This is an informational message only. No user action is required.

2014-05-04 14:42:08.73 Server      Detected 3838 MB of RAM. This is an informational message; no user action is required.

2014-05-04 14:42:08.76 Server      Using conventional memory in the memory manager.

以後會顯示NUMA信息和lock的信息,或爲每一個節點分配2500個鎖塊,5000個鎖擁有者

注意,在32bit系統下,每一個鎖塊須要64字節,鎖擁有者32字節,64bit下,鎖塊96字節,鎖擁有者56個字節:

2014-05-04 14:42:10.38 Server      Node configuration: node 0: CPU mask: 0x0000000000000003:0 Active CPU mask: 0x0000000000000003:0. This message provides a description of the NUMA configuration for this computer. This is an informational message only. No user action is required.

2014-05-04 14:42:10.40 Server      Using dynamic lock allocation.  Initial allocation of 2500 Lock blocks and 5000 Lock Owner blocks per node.  This is an informational message only.  No user action is required.

顯示CLR版本信息和默認TRACE的開啓:

2014-05-04 14:42:11.33 Server      CLR version v4.0.30319 loaded.

2014-05-04 14:42:12.44 spid8s      Resource governor reconfiguration succeeded.

2014-05-04 14:42:12.49 spid8s      SQL Server Audit is starting the audits. This is an informational message. No user action is required.

2014-05-04 14:42:12.60 spid8s      SQL Server Audit has started the audits. This is an informational message. No user action is required.

2014-05-04 14:42:13.93 spid8s      SQL Trace ID 1 was started by login "sa".

2014-05-04 14:42:14.09 spid8s      Server name is 'FANRCO-PC'. This is an informational message only. No user action is required.

5.1.3 數據庫啓動

系統數據庫的啓動順序是mastermsdbmssqlsystemresourcemodeltempdb,也能夠在errorlog中找到相關信息:

2014-05-04 14:42:10.57 spid8s      Starting up database 'master'.

2014-05-04 14:42:16.67 spid21s     Starting up database 'msdb'.

2014-05-04 14:42:16.67 spid22s     Starting up database 'AdventureWorks2012'.

2014-05-04 14:42:16.74 spid10s     Starting up database 'mssqlsystemresource'.

2014-05-04 14:42:16.74 spid23s     Starting up database 'tst'.

2014-05-04 14:42:16.75 spid24s     Starting up database 'AdventureWorksDW2012'.

2014-05-04 14:42:18.27 spid10s     Starting up database 'model'.

2014-05-04 14:42:19.42 spid10s     Clearing tempdb database.

2014-05-04 14:42:20.13 spid10s     Starting up database 'tempdb'.

啓動完成後,會打印一下信息:

2014-05-04 14:42:22.40 spid8s      Recovery is complete. This is an informational message only. No user action is required.

5.1.4 準備網絡

啓動完成master數據庫以後,就開始準備網絡了,從註冊表中讀取註冊表信息。而後開啓功能:

Shard Memory啓動後,errorlog會有:

2014-05-04 14:42:15.45 spid15s     Server local connection provider is ready to accept connection on [ \\.\pipe\SQLLocal\MSSQLSERVER ].

Named Pipe啓動後,會有:

2014-05-04 14:42:15.45 spid15s     Server local connection provider is ready to accept connection on [ \\.\pipe\sql\query ].

還有tcp啓動以後監聽的端口:

2014-05-04 14:42:15.52 Server      Server is listening on [ ::1 <ipv6> 1433].

2014-05-04 14:42:15.52 Server      Server is listening on [ 127.0.0.1 <ipv4> 1433].

若是有DAC專用管理鏈接,那麼還會打印:

2014-05-04 14:42:15.52 Server      Server is listening on [ ::1 <ipv6> 1434].

2014-05-04 14:42:15.52 Server      Server is listening on [ 127.0.0.1 <ipv4> 1434].

2014-05-04 14:42:15.52 Server      Dedicated admin connection support was established for listening locally on port 1434.

當網絡準備完成以後會打印:

2014-05-04 14:42:15.59 spid15s     SQL Server is now ready for client connections. This is an informational message; no user action is required.

在準備網絡中,若是某個協議不能被加載,SQL Server會報錯可是不會影響實例的啓動。只有一個例外,使用SSL對鏈接加密的,SSL在啓動須要SQL Server加載證書,若是證書沒法加載那麼SQL Server啓動會被終止。

5.2 數據庫狀態切換

5.2.1 Recovering

Recovering主要處理3件事情:

1.分析要作的工做:就是在事務日誌文件中,找到那些事務要重作,那些事務要回滾

2.Redo:將已經提交的可是沒有寫入數據文件的事務,作前滾

3.undo:對沒有提交的事務作回滾

一下幾個動做會讓數據庫進入Recovering

1.建立數據庫

2.Alter Online,上線數據庫

3.RESTORE WITH RECONVERY:恢復數據庫

4.DatabaseStartup,數據庫啓動,若是數據庫設置了自動關閉,就會在用戶第一次訪問的時候作這個動做。

恢復正常以後,數據庫會進入online狀態。

5.2.2 Online

這個狀態下用戶能夠訪問,修改。

5.2.3 RECOVERY PENDING

若是在數據恢復的時候不能正確打開數據庫文件,數據庫會進入RECONVERY PENDING的狀態。

解決辦法:用ALTER ONLINE再恢復一次,或者使用備份恢復

5.2.4 SUSPECT

數據庫進入SUSPECT狀態在這個狀態下管理員有3個選擇:

1.在一次ALTER ONLINE,命令SQL Server再恢復一次

2.放棄當前數據庫,再還原一個

3.將數據庫狀態設置爲,EMERGENCY,而後嘗試修復

5.2.5 EMERGENCY

在這個模式下,SQL Server對沒有徹底恢復的數據庫開放一個只讀窗口

5.2.6 RESTORING

數據庫在還原狀態下,若是是WITH RECOVERY,還原的最後一步會進入RECONVERY狀態。

5.2.7 Offline

數據庫處於離線狀態,可使用ALTER ONLINE讓數據庫上線。

5.3 數據庫長時間處於RECOVERING狀態

RECONVERING主要作3件事:

1.查看須要恢復那些事務

2.redo事務

3.undo事務

若是在redoundo遇到問題數據庫就會進入SUSPECT狀態,在完成恢復以前數據庫必須等待完成。

若是長期處於RECOVERING可使用,如下sql查看進度

SELECT*FROMsys.sysprocesses

SELECT*FROMsys.dm_exec_requests

若是沒有什麼變化,能夠開了重啓服務,再作一次恢復。

有時候不是很忙的數據庫恢復要很長時間,是由於有過多的VLF(虛擬日誌文件),致使恢復計算量過大,致使恢復很慢。

可使用DBCC LOGINFO查看虛擬日誌狀況。

5.3.1 多線程並行處理重作和回滾

在企業版上,SQL Server會啓動多個線程來重作和回滾動做。

5.3.2 延遲事務

這個和找不到數據文件不一樣,延遲事務是在恢復過程當中,出現IO錯誤,那個事務所修改的數據都會被適當的鎖定。SQL Server會放棄這個事務的回滾,繼續回滾其餘事務。上面的鎖會在dbcc checkdb修復一致性後釋放。

5.4 數據庫沒法啓動的常見問題

5.4.1 Master數據庫不能啓動

Master數據庫不能啓動通常是有怎麼幾種狀況:

1.sql server啓動參數中,指定的文件路徑不對。

2.找到了數據庫文件可是沒有權限

3.數據庫文件出現損壞,若是出現損壞,要不從備份中恢復,要不重建master數據庫(重建master數據庫能夠看聯機文檔)。

5.4.2 資源數據庫

Mssqlsystemresouce數據庫,對用戶透明,用戶沒法直接訪問這個數據庫。出現的問題通常以下:

1.sql server啓動參數中,指定的文件路徑不對。

2.發現資源數據庫的版本和數據庫版本不一致。

若是發現不一致相同版本的其餘實例中複製一個。

5.4.3 model數據庫

Model數據庫是全部用戶數據庫的樣板,根據model數據庫建立的用戶數據庫。出現的問題和master相似。

若是出現問題:

方法1、

1.traceno 3608啓動,能夠繞過model的恢復

2.恢復model數據庫

3.重啓

方法2、

直接替換model文件

方法3、

重建model數據庫

5.4.4 tempdb數據庫

Tempdb數據庫是每次服務重啓就會重建,因此可能出現的問題是:

1.物理文件路徑不對

         a.traceno 3608啓動

         b.修改數據庫文件路徑

         c.重啓

2.tempdb建立文件失敗,建立失敗通常是沒有權限或者空間不夠,若是空間不夠:

         a.traceno 3608啓動

         b.修改數據庫文件大小

         c.重啓

5.4.5 用戶數據庫

用戶數據庫不能啓動的常見問題是:缺乏或者沒法打開部分文件,恢復失敗。前者數據庫進入RECOVERY_PENDING狀態,後者會進入SUSPECT狀態。

5.4.5.1 文件打開問題

文件打開分爲2類:數據文件,日誌文件。

數據庫文件

若是主文件組出現問題,只有當主文件組所有恢復後才能打開數據庫

若是是輔助文件組能夠先把輔助文件組offline,而後 ALTER ONLINE數據庫。

而後從備份中恢復這個文件組

日誌文件

若是是簡單恢復模式,在上次數據庫正常關閉(寫入全部提交的數據,撤銷全部未提交的事務),那麼下次SQL Server啓動這個數據庫的時候,發現日誌文件不存在會從新建立一個。

若是是徹底恢復模式,或者上次沒有正常關閉,就不會爲這個數據庫建立日誌文件

 

若是要恢復數據庫,可使用備份還原,也能夠經過dbcc checkdb來恢復,不過可能會丟失一部分數據。

 

5.4.5.2 恢復失敗

在恢復中會出現3累錯誤

1.redo過程當中遇到能延遲的錯誤

2.undo過程當中遇到能延遲的錯誤

3.遇到不能延遲的錯誤

重作中遇到錯誤

若是錯誤是能夠延遲的,遇到錯誤的頁面被鎖定。

撤銷中遇到錯誤

在側小的時候發生錯誤,SQL Server會標記整個事務涉及到的頁面,而後繼續其餘undo。該鎖的對象屬於session -3

遇到這個問題能夠經過備份恢復,也能夠用dbcc checkdb恢復,不會可能要丟失一部分數據

SUSPECT模式

當數據庫恢復失敗不能延遲,最終會進入SUSPECT模式。通常出現這種狀況,要不就是有大量的損壞,要不就是分配頁出現損壞。

遇到這個問題能夠經過備份恢復,也能夠用dbcc checkdb恢復,不會可能要丟失一部分數據

5.5 集羣環境下,數據庫資源不能ONLINE的常見問題

 

參考:

http://www.cnblogs.com/lyhabc/archive/2012/09/15/2687076.html

相關文章
相關標籤/搜索