绿色版Sql Server制作原理简述

SQL Server 绿色版搭建指南
本文档详细介绍了如何通过调整 SQL Server 的配置参数、系统数据库路径、注册表设置等步骤,创建一个可移植的绿色版 SQL Server 实例。

这些文字是从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
指定内存的兆字节整数,该内存被保留下来用于 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
... ...
这样以后遇到什么操作系统都全部搞定。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值