阳光网驿-企业信息化交流平台【DTC零售连锁全渠道解决方案】

 找回密码
 注册

QQ登录

只需一步,快速开始

扫描二维码登录本站

手机号码,快捷登录

手机号码,快捷登录

老司机
查看: 4497|回复: 12

[推荐] 绿色版Sql Server制作原理简述。

[复制链接]
  • TA的每日心情
    开心
    2011-6-30 00:24
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2009-9-16 06:17:54 | 显示全部楼层 |阅读模式
    这些文字是从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
    ... ...
    这样以后遇到什么操作系统都全部搞定。

    [ 本帖最后由 longMP 于 2009-9-16 06:19 编辑 ]
    楼主热帖
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2016-9-1 11:51
  • 签到天数: 38 天

    [LV.5]常住居民I

    发表于 2009-9-16 06:29:13 | 显示全部楼层
    虽然是转载,但是还是学习了一下,感谢。。。。
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    奋斗
    6 小时前
  • 签到天数: 4740 天

    [LV.Master]伴坛终老

    发表于 2009-9-16 07:47:18 | 显示全部楼层
    对于 基础比较差的人来说难度不小
    启用邀请码注册,提高发帖质量,建设交流社区

    该用户从未签到

    发表于 2009-9-16 08:01:47 | 显示全部楼层
    学习学习
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情

    2020-1-16 20:25
  • 签到天数: 790 天

    [LV.10]以坛为家III

    发表于 2009-9-16 08:12:35 | 显示全部楼层
    SQL也能做成绿色版???稳定吗?
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    奋斗
    2020-10-31 13:09
  • 签到天数: 494 天

    [LV.9]以坛为家II

    发表于 2009-9-16 08:27:14 | 显示全部楼层
    哪个版本,6.5的有人制作了绿色版
    启用邀请码注册,提高发帖质量,建设交流社区

    该用户从未签到

    发表于 2009-9-16 08:29:39 | 显示全部楼层
    绿色版的恐怕不太好用呢
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情

    2015-7-21 23:26
  • 签到天数: 1483 天

    [LV.10]以坛为家III

    发表于 2009-9-16 09:21:18 | 显示全部楼层
    绿色版只能临时用一下,日常应用还是原版比较安全
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    无聊
    2019-1-8 11:21
  • 签到天数: 190 天

    [LV.7]常住居民III

    发表于 2009-9-16 09:27:20 | 显示全部楼层
    做成绿色版的,用来测试到是很方便,不过就算不是绿色版的,SQL也不占什么地方和资源
    启用邀请码注册,提高发帖质量,建设交流社区
  • TA的每日心情
    开心
    2024-6-16 10:52
  • 签到天数: 3451 天

    [LV.Master]伴坛终老

    发表于 2009-9-16 09:33:55 | 显示全部楼层
    好像绿色版的不太稳定把。没有一个能正常使用的。
    启用邀请码注册,提高发帖质量,建设交流社区
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    快速回复 返回顶部 返回列表