sqlservr 应用程序(转)

sqlservr 应用程序可以在命令提示符下启动,停止,暂停和继续 Microsoft SQL Server 的实例.

语法:

sqlservr [-sinstance_name] [-c] [-dmaster_path] [-f]

     [-eerror_log_path] [-lmaster_log_path] [-m]

     [-n] [-Ttrace#] [-v] [-x] [-gnumber] [-h]

参数:

-s instance_name

指定要连接到的 SQL Server 实例.如果未指定命名实例,sqlservr 将启动 SQL Server 的默认实例.

重要提示:启动 SQL Server 实例时,必须在该实例的相应目录中使用 sqlservr 应用程序.对于默认实例,/MSSQL/Binn 目录运行 sqlservr.对于命名实例, /MSSQL$instance_name/Binn 目录运行sqlservr.

-c

指示独立于 Windows 服务控制管理器启动 SQL Server 实例.从命令提示符下启动 SQL Server 时可使用此选项,以缩短 SQL Server 的启动时间.

注意:使用此选项时,将无法通过使用 SQL Server 服务管理器或 net stop 命令停止 SQL Server.如果注销计算机, SQL Server 将停止.

-dmaster_path

指出 master 数据库文件的完全限定路径. -d  master_path 之间没有空格.如果没有提供此选项,则使用现有的注册表参数.

-f

以最小配置启动 SQL Server 实例.在配置值的设置(如过度分配内存)妨碍服务器启动时,这非常有用.

-e error_log_path

指示错误日志文件的完全限定路径.如果不指定路径,则默认实例的默认位置是 <Drive>:/Program Files/Microsoft SQL Server/MSSQL/Log/Errorlog,命名实例的默认位置是 <Drive>:/Program Files/Microsoft SQL Server/MSSQL$instance_name/Log/Errorlog. -e  error_log_path之间没有空格.

-l master_log_path

指示 master 数据库事务日志文件的完全限定路径. -l  master_log_path 之间没有空格.

-m

指示以单用户模式启动 SQL Server 实例.如果以单用户模式启动 SQL Server,则只有一个用户可以连接.确保将已完成事务定期从磁盘缓存写入数据库设备的 CHECKPOINT 机制将不启动.通常情况下,在遇到需要修复系统数据库这样的问题时才使用该选项.启用 sp_configure allow updates 选项.默认情况下,allow updates 被禁用.

-n

用于启动 SQL Server 的命名实例.如果不设置 -s 参数,则尝试启动默认实例.必须在命令提示符下切换到实例相应的 BINN 目录,然后才能启动 sqlservr.exe.例如,如果 Instance1 为其二进制文件使用/mssql$Instance1,则用户必须位于 /mssql$Instance1/binn 目录中才能启动 sqlservr.exe -s instance1.如果用 -n 选项启动 SQL Server 实例,则最好也使用 -e 选项,否则将不会记录 SQL Server事件.

-T trace#

指示 SQL Server 实例启动时,指定的跟踪标志 (trace#应同时生效.跟踪标记用于以非标准行为启动服务器.有关详细信息,请参阅跟踪标志 (Transact-SQL).

重要提示:指定跟踪标志时,请使用 -T 来传递跟踪标志号.SQL Server 接受小写的 t (-t);但是 -t 通常用于设置 SQL Server 支持工程师所需的其他内部跟踪标志.

-v

显示服务器的版本号.

-x

不保留 CPU 时间和高速缓存命中率统计信息.可获得最大性能.

-g memory_to_reserve

指定 SQL Server 为位于 SQL Server 进程中但在 SQL Server 内存池之外的内存分配保留的内存整数量(MB).内存池以外的内存是指 SQL Server 用于加载诸如下列项目的区域:扩展过程 .dll 文件,分布式查询引用的 OLE DB 访问接口以及 Transact-SQL 语句中引用的自动化对象.默认值为 256 MB.

使用此选项可帮助优化内存分配,但仅限于物理内存超过操作系统设置的应用程序可用虚拟内存限制时.如果 SQL Server 的内存使用要求异乎寻常,并且 SQL Server 进程的虚拟地址空间全都在使用,那么对于这样的大内存配置适合使用此选项.对此选项的不当使用会导致 SQL Server 实例无法启动或遇到运行时错误.

除非在 SQL Server 错误日志中看到下列任何警告,否则应使用 -g 参数的默认值:

  • “Failed Virtual Allocate Bytes: FAIL_VIRTUAL_RESERVE <size>”
  • “Failed Virtual Allocate Bytes: FAIL_VIRTUAL_COMMIT <size>”

这些消息可能指示 SQL Server 尝试释放部分 SQL Server 内存池空间,以便为扩展存储过程 .dll 文件或自动化对象等项留出空间.在这种情况下,可以考虑增加由 -g 开关保留的内存量.

使用低于默认值的值可以增加缓冲池和线程堆栈可用的内存量;在不使用很多扩展存储过程,分布式查询或自动化对象的系统中,这种方法可提高需要大量内存的工作负荷的性能.

-h

 32  SQL Server 启用 AWE 时为热添加内存元数据保留虚拟内存地址空间.需要为具有 32  AWE 的热添加内存设置该选项,但将占用大约 0.5GB 的虚拟地址空间,并会增加内存优化的难度.对于 64  SQL Server,不是必需项.

备注:

多数情况下,sqlservr.exe 程序只用于故障排除或主要维护.在命令提示符下使用 sqlservr.exe 启动 SQL Server ,SQL Server 不作为服务启动,因此无法使用 net 命令停止 SQL Server.用户可以连接到 SQL Server, SQL Server 工具将显示服务的状态,以便 SQL Server 配置管理器正确指示服务已停止.SQL Server Management Studio 可以与服务器连接,但它也可以指示服务已停止

分离和附加数据库文件

在分离和附加数据库时可以使用sp_detach_db,sp_attach_db和sp_attach_single_file_db系统存储过程,这三个存储过程对于SQL Server数据库管理员执行以下的任务是非常方便的:

1.使用sp_detach_db将数据库从一个服务器分离;

2.使用sp_attach_db系统存储过程直接将.mdf和.ldf文件附加到数据库服务器;

3.使用sp_attach_single_file_db系统存储过程只附加.mdf文件;

尽管它们对于SQL Server数据库管理员是很有用的,但是在使用这两个存储过程时是有一些限制的,:

1.不能附加多个日志文件;

2.不能附加16个以上的文件;

在SQL Server 2008中,微软宣布上面的系统存储过程将在未来的版本中被废弃.而在“CREATE DATABASE”SQL语句中添加了一个从句”FOR ATTACH.并建议应该使用CREATE DATABASE database_name FOR ATTACH语句

下面介绍使用”FOR ATTACH“语句的用法,以克服在使用sp_attach_db和sp_attach_single_file_db时要面临的限制.

1.创建实例数据库

[c-sharp] view plaincopy

  1. USE master  
  2. GO  
  3. CREATE DATABASE Test ON  
  4. (NAME = ‘Test’, FILENAME = ‘D:/Test.mdf’, SIZE = 3072KB , FILEGROWTH = 1024KB )  
  5. LOG ON  
  6. (NAME = ‘Test_log’, FILENAME = ‘D:/Test_log.ldf’, SIZE = 1024KB , FILEGROWTH = 10%)  
  7. GO  

 

2.使用sp_detach_db分离该数据库并使用sp_attach_db将它重新附加

[c-sharp] view plaincopy

  1. USE master  
  2. GO  
  3. — 分离数据库  
  4. EXEC sp_detach_db ‘Test’  
  5. GO  
  6. — 附加数据库  
  7. EXEC sp_attach_db ‘Test’‘D:/Test.mdf’‘D:/Test_log.ldf’  
  8. GO  

 

3.使用“CREATE DATABASE database_name FOR ATTACH”语句附加数据库

[c-sharp] view plaincopy

  1. USE master  
  2. GO  
  3. — 分离数据库  
  4. EXEC sp_detach_db ‘Test’  
  5. GO  
  6. — 使用“CREATE DATABASE database_name FOR ATTACH”附加数据库  
  7. CREATE DATABASE Test ON  
  8. (FILENAME = ‘D:/Test.mdf’),  
  9. (FILENAME = ‘D:/Test_log.ldf’)  
  10. FOR ATTACH  
  11. GO  

 

4.分离数据库并删除日志(.ldf)文件

[c-sharp] view plaincopy

  1. USE master  
  2. GO  
  3. — 分离数据库  
  4. EXEC sp_detach_db ‘Test’  
  5. GO  
  6. — 删除日志文件  
  7. EXEC master..xp_cmdshell ‘del “D:/Test_log.ldf”‘  
  8. GO  
  9. — 如果cmdshell功能不可使用则使用下面语句激活cmdshell功能  
  10. USE master  
  11. GO  
  12. sp_configure ‘show advanced options’, 1  
  13. GO  
  14. RECONFIGURE WITH OVERRIDE  
  15. GO  
  16. SP_CONFIGURE ‘xp_cmdshell’, 1  
  17. RECONFIGURE WITH OVERRIDE  
  18. GO  

 

5.使用sp_attach_single_file_db附加.mdf文件

[c-sharp] view plaincopy

  1. USE master  
  2. GO  
  3. EXEC sp_attach_single_file_db ‘Test’‘D:/Test.mdf’  
  4. GO  

 

6.删除日志文件,使用“CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG附加数据库

[c-sharp] view plaincopy

  1. USE master  
  2. GO  
  3. EXEC sp_detach_db ‘Test’  
  4. GO  
  5. — 删除日志文件  
  6. EXEC master..xp_cmdshell ‘del “D:/Test_log.ldf”‘  
  7. GO  
  8. — 使用“CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG”附加数据库  
  9. CREATE DATABASE Test ON  
  10. (FILENAME = ‘D:/Test.mdf’)  
  11. FOR ATTACH_REBUILD_LOG  
  12. GO  

 

如何收缩数据库日志文件

上网查了一下,很多人都遇到过这样的情况:数据库的数据文件才2G左右,但是日志文件就已经20G,如何收缩数据库日志文件呢?

大致的方法有以下几种:

1.DUMP TRANSACTION database_name WITH NO_LOG 清空事务日志

2.BACKUP LOG WITH NO_LOG 截断事务日志

3.BACKUP LOG WITH TRUNCATE_ONLY 截断事务日志

4.DBCC SHRINKDATABASE() 收缩指定数据库中的数据文件和日志文件的大小

5.DBCC SHRINKFILE() 收缩当前数据库的指定数据或日志文件的大小

6.删除日志文件

其中前3中方法是SQL Server 2008 中不再可用的数据库引擎功能,使用了第四种方法感觉效果不明显.下面我们介绍一下如何使用后两种方法收缩数据库日志文件.

1.使用DBCC SHRINKFILE() 收缩当前数据库的指定数据或日志文件的大小,AdventureWorks数据库为例

USE AdventureWorks;

GO

— 设置AdventureWorks数据库的恢复模式为简单

ALTER DATABASE AdventureWorks

SET RECOVERY SIMPLE;

GO

— 收缩数据库日志文件到1M

DBCC SHRINKFILE (AdventureWorks_Log, 1);

GO

— 设置AdventureWorks数据库的恢复模式为完全

ALTER DATABASE AdventureWorks

SET RECOVERY FULL;

GO

 

2.删除日志文件,AdventureWorks数据库为例

USE master

GO

— 分离AdventureWorks数据库

EXEC sp_detach_db ‘AdventureWorks’

GO

— 删除日志文件

EXEC master..xp_cmdshell ‘del “C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/AdventureWorks_Log.ldf”‘

GO

— 如果cmdshell功能不可使用则使用下面语句激活cmdshell功能

USE master

GO

sp_configure ‘show advanced options’, 1

GO

RECONFIGURE WITH OVERRIDE

GO

sp_configure ‘xp_cmdshell’, 1

RECONFIGURE WITH OVERRIDE

GO

 

— 使用sp_attach_single_file_db附加.mdf文件

USE master

GO

EXEC sp_attach_single_file_db ‘AdventureWorks’, ‘C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/AdventureWorks_Data.mdf’

GO

或者

— 使用”CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG”附加数据库(推荐使用)

CREATE DATABASE AdventureWorks ON

(FILENAME = ‘C:/Program Files/Microsoft SQL Server/MSSQL10.MSSQLSERVER/MSSQL/DATA/AdventureWorks_Data.mdf’)

FOR ATTACH_REBUILD_LOG

GO