根據(jù)版本的不同整理所有的綠色SQL Server
1. Sqlservr.exe 運(yùn)行參數(shù)
Sql Server的啟動(dòng)可以為Windows服務(wù)方式(默認(rèn)),也可以以應(yīng)用程序方式啟動(dòng)。下面介紹sqlservr.exe以應(yīng)用程序方式啟動(dòng)時(shí)的參數(shù)問題。
sqlservr 應(yīng)用程序用法:
sqlservr [-sinstance_name] [-c] [-dmaster_path] [-f]
[-eerror_log_path] [-lmaster_log_path] [-m]
[-n] [-Ttrace#] [-v] [-x] [-g number] [-O] [-y number]
-sinstance_name
指定要連接到的 SQL Server 實(shí)例。如果未指定命名實(shí)例,sqlservr 將啟動(dòng) SQL Server 默認(rèn)實(shí)例。重要 啟動(dòng) SQL Server 實(shí)例時(shí),必須從實(shí)例所在的適當(dāng)目錄使用 sqlservr 應(yīng)用程序。對(duì)于默認(rèn)實(shí)例,從 MSSQLBinn 目錄運(yùn)行 sqlservr。對(duì)于命名實(shí)例,在 MSSQL$instance_nameBinn 目錄運(yùn)行 sqlservr。
-c
表示以獨(dú)立于 Windows NT 服務(wù)控制管理器的方式啟動(dòng) SQL Server 實(shí)例。當(dāng)從命令提示符下啟動(dòng) SQLServer 時(shí),可使用該選項(xiàng)縮短啟動(dòng) SQL Server 的時(shí)間。(注意:當(dāng)使用該選項(xiàng)時(shí),無法通過使用 SQLServer 服務(wù)管理器或 net stop 命令停止 SQL Server,而且如果已從 Microsoft Windows NT? 系統(tǒng)注銷,則 SQL Server 將停止運(yùn)行。)-dmaster_path指出 master 數(shù)據(jù)庫文件的完全合法路徑。在 -d 和 master_path 之間沒有空格。
-f
以最小配置模式啟動(dòng)服務(wù)器。然后,系統(tǒng)管理員可對(duì)配置選項(xiàng)重新配置(使用 sp_configure 系統(tǒng)存儲(chǔ)過程)。
-eerror_log_path
表示錯(cuò)誤日志文件的完全合法路徑。如果未指定路徑,則默認(rèn)實(shí)例的默認(rèn)位置是 x:Program FilesMicrosoft SQL ServerMSSQLLogErrorlog,命名實(shí)例的默認(rèn)位置是 x:Program FilesMicrosoft SQL ServerMSSQL$instance_nameLogErrorlog。在 -e 和 error_log_path 之間沒有空格。
-lmaster_log_path
指示 master 數(shù)據(jù)庫事務(wù)日志文件的完全合法路徑。在 -l 和 master_log_path 之間沒有空格。
-m
表示在單用戶模式下啟動(dòng) SQL Server 實(shí)例。如果 SQL Server 是以單用戶模式啟動(dòng)的,則只能連接一個(gè)用戶。CHECKPOINT 機(jī)制(它確保完成的事務(wù)定期從磁盤高速緩存寫入數(shù)據(jù)庫設(shè)備中)將不啟動(dòng)。(一般情況下,如果您遇到需要修復(fù)的系統(tǒng)數(shù)據(jù)庫問題時(shí),可使用此選項(xiàng)。)
-n
表示您不想使用 Windows NT 應(yīng)用程序日志來記錄 SQL Server 事件。如果用 -n 選項(xiàng)啟動(dòng) SQL Server 實(shí)例,則最好也使用 -e 選項(xiàng),否則將不會(huì)記錄 SQL Server 事件。
-Ttrace#
表示應(yīng)使用指定的有效跟蹤標(biāo)記 (trace#) 來啟動(dòng) SQL Server 實(shí)例。跟蹤標(biāo)志用來啟動(dòng)具有非標(biāo)準(zhǔn)行為的服務(wù)器。有關(guān)可用跟蹤標(biāo)記 (trace#) 的更多信息,請(qǐng)參見跟蹤標(biāo)記。重要 當(dāng)指定跟蹤標(biāo)志時(shí),請(qǐng)使用 –T 來傳遞跟蹤標(biāo)志號(hào)。SQL Server 接受小寫字母 t (-t);然而,-t 還設(shè)置 SQL Server 支持工程師所需的其它內(nèi)部跟蹤標(biāo)記。
-v
顯示服務(wù)器的版本號(hào)。
-x
禁用維護(hù) CPU 統(tǒng)計(jì)。
-g memory_to_reserve
指定內(nèi)存的兆字節(jié)整數(shù),該內(nèi)存被保留下來用于 SQL Server 2000 內(nèi)部(進(jìn)程內(nèi))運(yùn)行的其它應(yīng)用程序。
-O
指定不需要分布式 COM (DCOM),從而禁用異類查詢。
-y error_number
如果 SQL Server 2000 遇到在該選項(xiàng)中指定的錯(cuò)誤信息,它將把表象堆棧跟蹤寫入錯(cuò)誤日志。可以使用多個(gè) –y 參數(shù)指定多個(gè)錯(cuò)誤。
2. 系統(tǒng)數(shù)據(jù)庫路徑問題
一般情況下,正常安裝sql server之后,master等系統(tǒng)數(shù)據(jù)庫的路徑都是被設(shè)置為絕對(duì)路徑,如果要改正數(shù)據(jù)庫的路徑為相對(duì)路徑,可以使用以下SQl語句:
sql:=format(' update sysaltfiles set filename='%s' where filename='%s' ',
['...data'+extractfilename(MDFFile),MDFFile]);
ADOQuery1.Close;
ADOQuery1.SQL.Text:=sql;
ADOQuery1.ExecSQL;
sql:=format(' update sysaltfiles set filename='%s' where filename='%s' ',
['...data'+extractfilename(LogFile),LogFile]);
ADOQuery1.Close;
ADOQuery1.SQL.Text:=sql;
ADOQuery1.ExecSQL;
sql:=Format('update sysdatabases set filename='%s' where name='%s'', ['...data'+extractfilename(MDFFile),Edit1.text]);
ADOQuery1.Close;
ADOQuery1.SQL.Text:=sql;
ADOQuery1.ExecSQL;
大家打開sysaltfiles 表和sysdatabases 一看就知道了,不多說了。除了系統(tǒng)數(shù)據(jù)庫,其它的數(shù)據(jù)庫也可以使用這種方法修改為相對(duì)路徑。
使用相對(duì)路徑的好處是可以讓你的綠色Sql server隨時(shí)copy到任意目錄或是任意其它機(jī)器上啟動(dòng),并且原來的數(shù)據(jù)庫全部可以使用,如果是絕對(duì)路徑到了其它機(jī)器就不行了。
3. 注冊(cè)表問題:
大家可以看下面的注冊(cè)表文件
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$name]
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServer]
'AuditLevel'=dword:00000000
'DefaultLogin'='guest'
'ListenOn'=hex(7):53,00,53,00,4d,00,53,00,53,00,48,00,37,00,30,00,00,00,53,00, 53,00,4e,00,45,00,54,00,4c,00,49,00,42,00,00,00,00,00
'LoginMode'=dword:00000000
'Map_'=''
'Map#'='-'
'Map$'=''
'SetHostName'=dword:00000000
'Tapeloadwaittime'=dword:ffffffff
'uptime_pid'=dword:00001044
'uptime_time_utc'=hex:26,57,c8,b3,fb,bb,c5,01
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerCurrentVersion]
'CurrentVersion'='8.00.194'
'RegisteredOwner'=''
'SerialNumber'=''
'CSDVersionNumber'=dword:00000300
'CSDVersion'='8.00.761'
'Language'=dword:00000804
'checksum'=hex:37,35,32,32,63,31,35,38,61,65,37,64,34,63,64,37,35,30,64,61,30, 33,34,62,37,64,63,32,30,61,36,36,39,37,62,34,61,35,65,36,63,66,62,61,38,37, 39,36,37,31,66,33,39,61,36,65,35,64,30,33,37,36,37,65,64,36,33,30,61,39,63, 36,66,37,36,30,35,65,32,66,34,66,31,33,63,39,33,63,34,66,62,66,34,66,64,38, 64,65,36,64,35,34,37,33,35,39,35,32,36,63,61,32,36,63,33,32,64,34,36,33,65, 36,39,34,30,65,61,37,64,35,30,61,66,34,64,32,66,38,37,36,30,61,39,64,30,61, 32,36,64,65,66,66,00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerParameters]
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerSuperSocketNetLib]
'ProtocolList'=hex(7):74,00,63,00,70,00,00,00,6e,00,70,00,00,00,00,00
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerSuperSocketNetLibNp]
'PipeName'='.pipeMSSQL$$namesqlquery'
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameMSSQLServerSuperSocketNetLibTcp]
'TcpHideFlag'=dword:00000000
'TcpDynamicPorts'='$port'
'TcpPort'='$port'
[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMicrosoft SQL Server$nameSetup]
'FeatureName'='SqlRun'
'FirstStart'=dword:00000000
'ProductCode'='{E09B48B5-E141-427A-AB0C-D3605127224A}'
'SQLDataRoot'='$path'
'SQLPath'='$path'
這是注冊(cè)一個(gè)Sql Server實(shí)例所要使用的注冊(cè)表,把里面的$name,$path,$port替換成你定義的實(shí)例名,當(dāng)前程序所有路徑,監(jiān)聽端口,然后導(dǎo)入注冊(cè)表就可以了。
4. 啟動(dòng)Sql Server
iPath:=ExtractFilePath(Application.ExeName);
CommandLine:=PChar(iPath+'binnsqlservr.exe -d...datamaster.mdf -l...datamastlog.ldf -e...Loglog.txt+Edit1.Text);
CreateProcess(
nil,
CommandLine,
nil,
nil,
true,
CREATE_NO_WINDOW,
nil,
PChar(iPath+'binn'),
StartupInfo,
ProcessInformation
)
也可以直接寫個(gè).bat運(yùn)行就ok了.
5.啟動(dòng)日志問題
這個(gè)問題最簡(jiǎn)單,因?yàn)樵趫?zhí)行sqlservr.exe時(shí)指定的有l(wèi)og文件,你只用用個(gè)定時(shí)器(50ms)讀文件,就可以在程序中顯示出來啟動(dòng)日志了,呵呵,這只是個(gè)思想,具體的自已想辦法吧.
6. 停止服務(wù)
用CreateProcess可以得到進(jìn)程ID,TerminateProcess就關(guān)了sql server進(jìn)程,服務(wù)就停了,簡(jiǎn)單吧。
根據(jù)上面的6個(gè)步驟,你就可以自已搞定一個(gè)綠色的Sql Server了.并且你可以根據(jù)不同的sql server版本,整理出所有版本的綠色sql server。
綠色 sql server 企業(yè)版
綠色 sql server 個(gè)人版
綠色 MSDE
... ...
這樣以后遇到什么操作系統(tǒng)都全部搞定。
最后說一句,只要你能把幾個(gè)Sql server版本的數(shù)據(jù)整理好(主要是系統(tǒng)數(shù)據(jù)庫的路徑問題(好像現(xiàn)在盒子已經(jīng)有綠色企業(yè)版的文件了),DLL全部copy就OK了),都可以使用我的管理工具進(jìn)行管理,呵呵,當(dāng)然你也可以作出自已的管理器。
