這些文字是從DELPHI盒子上看到的,原作者為LWP_LWP
附原地址:http://www.2ccc.com/article.asp?articleid=2717
在此貼出,僅供需要的人蔘考。
1. Sqlservr.exe 運行參數。
Sql Server的啟動可以為Windows服務方式(預設),也可以以應用程式方式啟動。下面介紹sqlservr.exe以應用程式方式啟動時的參數問題。
sqlservr 應用程式用法:
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 執行個體。如果未指定具名執行個體,sqlservr 將啟動 SQL Server 預設執行個體。重要 啟動 SQL Server 執行個體時,必須從執行個體所在的適當目錄使用 sqlservr 應用程式。對於預設執行個體,從 /MSSQL/Binn 目錄運行 sqlservr。對於具名執行個體,在 /MSSQL$instance_name/Binn 目錄運行 sqlservr。
-c
表示以獨立於 Windows NT 服務控制管理員的方式啟動 SQL Server 執行個體。當從命令提示字元下啟動 SQLServer 時,可使用該選項縮短啟動 SQL Server 的時間。(注意:當使用該選項時,無法通過使用 SQLServer 服務管理員或 net stop 命令停止 SQL Server,而且如果已從 Microsoft Windows NT? 系統登出,則 SQL Server 將停止運行。)-dmaster_path指出 master 資料庫檔案的完全合法路徑。在 -d 和 master_path 之間沒有空格。
-f
以最小配置模式啟動伺服器。然後,系統管理員可對配置選項重新設定(使用 sp_configure 系統預存程序)。
-eerror_log_path
表示錯誤記錄檔檔案的完全合法路徑。如果未指定路徑,則預設執行個體的預設位置是 x:/Program Files/Microsoft SQL Server/MSSQL/Log/Errorlog,具名執行個體的預設位置是 x:/Program Files/Microsoft SQL Server/MSSQL$instance_name/Log/Errorlog。在 -e 和 error_log_path 之間沒有空格。
-lmaster_log_path
指示 master 資料庫交易記錄檔的完全合法路徑。在 -l 和 master_log_path 之間沒有空格。
-m
表示在單一使用者模式下啟動 SQL Server 執行個體。如果 SQL Server 是以單一使用者模式啟動的,則只能串連一個使用者。CHECKPOINT 機制(它確保完成的事務定期從磁碟快取寫入資料庫裝置中)將不啟動。(一般情況下,如果您遇到需要修複的系統資料庫問題時,可使用此選項。)
-n
表示您不想使用 Windows NT 應用程式記錄檔來記錄 SQL Server 事件。如果用 -n 選項啟動 SQL Server 執行個體,則最好也使用 -e 選項,否則將不會記錄 SQL Server 事件。
-Ttrace#
表示應使用指定的有效跟蹤標記 (trace#) 來啟動 SQL Server 執行個體。追蹤旗標用來啟動具有非標準行為的伺服器。有關可用跟蹤標記 (trace#) 的更多資訊,請參見跟蹤標記。重要 當指定追蹤旗標時,請使用 –T 來傳遞追蹤旗標號。SQL Server 接受小寫字母 t (-t);然而,-t 還設定 SQL Server 支援工程師所需的其它內部跟蹤標記。
-v
顯示伺服器的版本號碼。
-x
禁用維護 CPU 統計。
-g memory_to_reserve
指定記憶體的MB整數,該記憶體被保留下來用於 SQL Server 2000 內部(進程內)啟動並執行其它應用程式。
-O
指定不需要分散式 COM (DCOM),從而禁用異類查詢。
-y error_number
如果 SQL Server 2000 遇到在該選項中指定的錯誤資訊,它將把表象堆疊追蹤寫入錯誤記錄檔。可以使用多個 –y 參數指定多個錯誤。
2. 系統資料庫路徑問題.
一般情況下,正常安裝sql server之後,master等系統資料庫的路徑都是被設定為絕對路徑,如果要改正資料庫的路徑為相對路徑,可以使用以下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 一看就知道了,不多說了。除了系統資料庫,其它的資料庫也可以使用這種方法修改為相對路徑。
使用相對路徑的好處是可以讓你的綠色Sql server隨時copy到任意目錄或是任意其它機器上啟動,並且原來的資料庫全部可以使用,如果是絕對路徑到了其它機器就不行了。
3. 註冊表問題:
大家可以看下面的註冊表檔案
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/$name]
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/$name/MSSQLServer]
"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_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/$name/MSSQLServer/CurrentVersion]
"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_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/$name/MSSQLServer/Parameters]
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/$name/MSSQLServer/SuperSocketNetLib]
"ProtocolList"=hex(7):74,00,63,00,70,00,00,00,6e,00,70,00,00,00,00,00
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/$name/MSSQLServer/SuperSocketNetLib/Np]
"PipeName"="[url=]////.//pipe//MSSQL$$name//sql//query[/url]"
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/$name/MSSQLServer/SuperSocketNetLib/Tcp]
"TcpHideFlag"=dword:00000000
"TcpDynamicPorts"="$port"
"TcpPort"="$port"
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Microsoft SQL Server/$name/Setup]
"FeatureName"="SqlRun"
"FirstStart"=dword:00000000
"ProductCode"="{E09B48B5-E141-427A-AB0C-D3605127224A}"
"SQLDataRoot"="$path"
"SQLPath"="$path"
這是註冊一個Sql Server執行個體所要使用的註冊表,把裡面的$name,$path,$port替換成你定義的執行個體名,當前程式所有路徑,監聽連接埠,然後匯入註冊表就可以了。
4. 啟動Sql Server
iPath:=ExtractFilePath(Application.ExeName);
CommandLine:=PChar(iPath+'binn/sqlservr.exe -d./../data/master.mdf -l./../data/mastlog.ldf -e./../Log/log.txt+Edit1.Text);
CreateProcess(
nil,
CommandLine,
nil,
nil,
true,
CREATE_NO_WINDOW,
nil,
PChar(iPath+'binn/'),
StartupInfo,
ProcessInformation
)
也可以直接寫個.bat運行就ok了.
5. 開機記錄問題。
這個問題最簡單,因為在執行sqlservr.exe時指定的有log檔案,你只用用個定時器(50ms)讀檔案,就可以在程式中顯示出來開機記錄了,呵呵,這隻是個思想,具體的自已想辦法吧.
6. 停止服務
用CreateProcess可以得到進程ID,TerminateProcess就關了sql server進程,服務就停了,簡單吧。
根據上面的6個步驟,你就可以自已搞定一個綠色的Sql Server了.並且你可以根據不同的sql server版本,整理出所有版本的綠色sql server。
綠色 sql server 企業版
綠色 sql server 個人版
綠色 MSDE
... ...
這樣以後遇到什麼作業系統都全部搞定。