SQL Server基础

安装

Docker

获取容器镜像

启用IPV4端口转发:

1
2
3
4
5
6
sudo gedit /etc/sysctl.conf
# 添加如下内容: 
net.ipv4.ip_forward=1
systemctl restart network
sudo sysctl -p
sysctl net.ipv4.ip_forward

启动docker daemon之后,运行如下命令:

1
2
3
4
5
docker pull mcr.microsoft.com/mssql/server:<image_tag>
# SQL Server 2019
docker pull mcr.microsoft.com/mssql/server:2019-CU4-ubuntu-18.04
# SQL Server 2017
docker pull mcr.microsoft.com/mssql/server:2017-CU20-ubuntu-16.04

运行容器

配置容器
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
# Run the container image
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong@Passw0rd>" \
   -p 1433:1433 --name sql1 \
   -d mcr.microsoft.com/mssql/server:2019-CU4-ubuntu-18.04
# Or use volume
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
   --name 'sql1' -p 1401:1433 \
   -v sql1data:/var/opt/mssql \
   -d mcr.microsoft.com/mssql/server:2019-CU4-ubuntu-18.04

下表提供了docker run命令使用的参数描述 | Parameter | Description | |—–|—–| | -e “ACCEPT_EULA=Y” | 设置ACCEPT_EULA变量为任意值以确认接受End-User Licensing Agreement.| | -e “SA_PASSWORD=<YourStrong@Passw0rd>” | 设置你自己的强密码,至少8位,并满足SQL Server密码要求。| | -p 1433:1433 | 映射容器的TCP端口(第二个值)到主机端口(第一个值) | | –name sql1 | 为容器设置一个个性化名称而不是自动生成的名字。如果你有多个容器,那么不能重复使用此名字. | | -d mcr.microsoft.com/mssql/server:2017-latest | The SQL Server 2017 Linux container image. |

以主机非root用户运行容器

使用UID 4000的用户运行

1
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" --cap-add SYS_PTRACE -u 4000:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

使用root用户运行非root容器

1
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" -u 0:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

以主机用户运行

1
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" --cap-add SYS_PTRACE -u $(id -u myusername):0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

以不同用户和用户组运行

1
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" --cap-add SYS_PTRACE -u (id -u myusername):(id -g myusername) -v /path/to/mssql:/var/opt/mssql -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
更改默认文件位置

添加MSSQL_DATA_DIR环境变量以更改默认文件位置

1
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" -e "MSSQL_DATA_DIR=/my/file/path" -v /my/host/path:/my/file/path -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
环境变量

使用-e选项来配置SQL Server环境变量,前面已经使用了ACCEPT_EULASA_PASSWORD,还可以使用MSSQL_PID来设置产品ID,默认为Developer,可以设置为Express、Standard、Enterprise和EnterpriseCore。

完整的环境变量列表可以在这里看到。

检查容器运行

使用docker ps命令查看你的docker容器:

1
docker ps -a

如果STATUS列显示Up,则SQL Server正在容器内运行,并监听PORTS列的端口。如果STATUS列显示Exited则查看Troubleshooting section of the configuration guide

-h(host name)参数会更改容器内部名称,此名称通过如下Transact-SQL查询

1
2
3
4
SELECT @@SERVERNAME,
    SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
    SERVERPROPERTY('MachineName'),
    SERVERPROPERTY('ServerName')

-h-name设置为相同的值是分辨不同目标容器的好办法。

配置SQL Server

更改SA密码

SA是SQL Server数据库实例创建时的系统管理员账户,在创建SQL Server容器后可以在容器内运行echo $SA_PASSWORD查看SA_PASSWORD环境变量。

使用docker exec运行sqlcmd以使用Transact-SQL更改密码。

1
2
3
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P "<YourStrong@Passw0rd>" \
   -Q 'ALTER LOGIN SA WITH PASSWORD="<YourNewStrong@Passw0rd>"'
配置时区

在Linux上运行tzselect以查看可用的时区值,然后给容器配置TZ环境变量

1
tzselect

选择之后会出现类似如下

1
2
3
4
5
6
The following information has been given:

	China
	Beijing Time

Therefore TZ='Asia/Shanghai' will be used.

利用以上信息给SQL Server配置时区

1
2
3
4
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
   -p 1433:1433 --name sql1 \
   -e 'TZ=Asia/Shanghai'\
   -d mcr.microsoft.com/mssql/server:2019-CU4-ubuntu-18.04

连接SQL Server

在容器内连接数据库

使用docker exec -it 命令打开一个交互式的bash

1
2
3
docker exec -it <container_id|container_name> "bash"
# Or
docker exec -it <container_id|container_name> /bin/bash

进入容器后,由于sqlcmd默认不在path中,所以必须使用路径全称

1
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "<YourNewStrong@Passw0rd>"

成功后,可以看到sqlcmd命令提示:1>

也可以直接使用如下命令打开sqlcmd

1
docker exec -it <container_id|container_name> /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P <your_password>
从容器外连接数据库

从容器外使用sqlcmd必须安装SQL Server命令行工具。在Linux上使用ifconfigip addr查询托管容器的主机IP,在Windows上使用ipconfig

在sqlcmd命令中指定要映射到容器端口1433的IP地址和端口,在此例中使用相同的端口1433

1
sqlcmd -S <ip_address>,1433 -U SA -P "<YourNewStrong@Passw0rd>"

使用默认的1433端口可以省略

1
sqlcmd -S 10.3.2.4 -U SA -P '<YourPassword>'

如果在docker run命令中使用了非1433端口,如-p 1400:1433

1
sqlcmd -S 10.3.2.4,1400 -U SA -P '<YourPassword>'
测试数据库

在sqlcmd命令提示中使用如下命令测试数据库

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
-- 创建数据库
CREATE DATABASE TestDB
SELECT Name from sys.Databases
-- 上述两个命令并不自动执行,必须输入GO
GO
-- 插入数据
USE TestDB
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
GO
-- 查询数据
SELECT * FROM Inventory WHERE quantity > 152;
GO

退出

1
2
3
4
# 退出sqlcmd会话
QUIT
# 退出容器交互式命令行
exit

持久化数据

当你使用docker rm移除容器时,里面的所有数据都会被删除,包括你的SQL Server和数据库文件。使用data volumes持久化你的数据库文件,以便关联的容器删除时仍然保留这些文件。

  • 加载主机目录作为数据卷
1
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v <host directory>:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-CU4-ubuntu-18.04
  • 使用数据卷容器
    创建一个volume,并使用其名称而不是上面的主机目录。
1
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-CU4-ubuntu-18.04
使用持久化数据

使用创建容器时的sql1data卷来恢复数据库

首先移除容器

1
2
docker stop sql1
docker rm sql1

使用已有volume创建新容器

1
2
3
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
   --name 'sql2' -e 'MSSQL_PID=Developer' -p 1401:1433 \
   -v sql1data:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-CU4-ubuntu-18.04

查询以确认

1
2
3
docker exec -it sql2 /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
   -Q 'SELECT StockItemID, StockItemName FROM WideWorldImporters.Warehouse.StockItems WHERE StockItemID=1'

管理容器

从容器复制文件
1
docker cp <container_id|container_name>:<Container path> <host path>

例子

1
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog /tmp/errorlog
1
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog C:\Temp\errorlog
复制容器文件到主机
1
docker cp <Host path> <container_id|container_name>:<Container path>

例子

1
docker cp /tmp/mydb.mdf d6b75213ef80:/var/opt/mssql/data
1
docker cp C:\Temp\mydb.mdf d6b75213ef80:/var/opt/mssql/data

数据库管理

复制备份文件到容器
1
2
3
4
5
6
7
# 创建容器文件夹
docker exec -it sql1 mkdir /var/opt/mssql/backup
# 下载备份文件到主机
cd ~
curl -L -o wwi.bak 'https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak'
# 复制主机文件到容器
docker cp wwi.bak sql1:/var/opt/mssql/backup
1
2
3
4
# Powershell版
docker exec -it sql1 mkdir /var/opt/mssql/backup
curl -OutFile "wwi.bak" "https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak"
docker cp wwi.bak sql1:/var/opt/mssql/backup
恢复数据库

在sqlcmd中运行命令查看备份文件里的文件名称

1
2
3
4
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost \
   -U SA -P '<YourNewStrong!Passw0rd>' \
   -Q 'RESTORE FILELISTONLY FROM DISK = "/var/opt/mssql/backup/wwi.bak"' \
   | tr -s ' ' | cut -d ' ' -f 1-2
1
2
3
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost `
   -U SA -P "<YourNewStrong!Passw0rd>" `
   -Q "RESTORE FILELISTONLY FROM DISK = '/var/opt/mssql/backup/wwi.bak'"

恢复数据库

1
2
3
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
   -Q 'RESTORE DATABASE WideWorldImporters FROM DISK = "/var/opt/mssql/backup/wwi.bak" WITH MOVE "WWI_Primary" TO "/var/opt/mssql/data/WideWorldImporters.mdf", MOVE "WWI_UserData" TO "/var/opt/mssql/data/WideWorldImporters_userdata.ndf", MOVE "WWI_Log" TO "/var/opt/mssql/data/WideWorldImporters.ldf", MOVE "WWI_InMemory_Data_1" TO "/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1"'
1
2
3
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
   -S localhost -U SA -P "<YourNewStrong!Passw0rd>" `
   -Q "RESTORE DATABASE WideWorldImporters FROM DISK = '/var/opt/mssql/backup/wwi.bak' WITH MOVE 'WWI_Primary' TO '/var/opt/mssql/data/WideWorldImporters.mdf', MOVE 'WWI_UserData' TO '/var/opt/mssql/data/WideWorldImporters_userdata.ndf', MOVE 'WWI_Log' TO '/var/opt/mssql/data/WideWorldImporters.ldf', MOVE 'WWI_InMemory_Data_1' TO '/var/opt/mssql/data/WideWorldImporters_InMemory_Data_1'"
检查恢复的数据库
1
2
3
sudo docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
   -Q 'SELECT Name FROM sys.Databases'
1
2
3
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
   -S localhost -U SA -P "<YourNewStrong!Passw0rd>" `
   -Q "SELECT Name FROM sys.Databases"
创建备份

备份数据库

1
2
3
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P '<YourNewStrong!Passw0rd>' \
   -Q "BACKUP DATABASE [WideWorldImporters] TO DISK = N'/var/opt/mssql/backup/wwi_2.bak' WITH NOFORMAT, NOINIT, NAME = 'WideWorldImporters-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
1
2
3
docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd `
   -S localhost -U SA -P "<YourNewStrong!Passw0rd>" `
   -Q "BACKUP DATABASE [WideWorldImporters] TO DISK = N'/var/opt/mssql/backup/wwi_2.bak' WITH NOFORMAT, NOINIT, NAME = 'WideWorldImporters-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"

复制备份到主机

1
2
3
cd ~
docker cp sql1:/var/opt/mssql/backup/wwi_2.bak wwi_2.bak
ls -l wwi*

升级

卸载

配置

服务器配置选项

配置最大工作线程

当查询请求的实际数量少于在max worker threads中设置的数量时,一个线程会处理每个查询请求。但是,如果查询请求的实际数量超出了在max worker threads中设置的数量,则SQL Server会将工作线程池化,以便下一个可用的工作线程可以处理该请求。

使用下列公式计算自动配置的最大工作线程数: |Number of CPUs|32-bit computer|64-bit computer|
|————|————|————| |<= 4 processors|256|512| |> 4 processors and < 64 processors|256 + ((logical CPU’s - 4) * 8)|512 + ((logical CPU’s - 4) * 16)| |> 64 processors|256 + ((logical CPU’s - 4) * 32)|512 + ((logical CPU’s - 4) * 32)|

当所有工作线程都在长时间运行的查询中处于活动状态时,SQL Server可能似乎没有响应,直到工作线程完成并变得可用为止。 尽管这不是缺陷,但有时还是不希望有的。 如果某个进程似乎无响应,并且无法处理任何新查询,请使用专用管理员连接(DAC)连接到SQL Server,然后终止该进程。 为防止这种情况,请增加最大工作线程数。

max worker threads服务器配置选项不会限制系统中可能的所有线程。诸如Availibility Groups,Service Broker,Lock Manager或其他任务之类的任务所需的线程在此限制之外产生。如果超出了配置的线程数,则以下查询将提供有关已产生其他线程的系统任务的信息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
SELECT  s.session_id, r.command, r.status,  
   r.wait_type, r.scheduler_id, w.worker_address,  
   w.is_preemptive, w.state, t.task_state,  
   t.session_id, t.exec_context_id, t.request_id  
FROM sys.dm_exec_sessions AS s  
INNER JOIN sys.dm_exec_requests AS r  
   ON s.session_id = r.session_id  
INNER JOIN sys.dm_os_tasks AS t  
   ON r.task_address = t.task_address  
INNER JOIN sys.dm_os_workers AS w  
   ON t.worker_address = w.worker_address  
WHERE s.is_user_process = 0;
例子

example1:使用如下语句将max worker threads修改为900:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
USE AdventureWorks2012 ;  
GO  
EXEC sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE ;  
GO  
EXEC sp_configure 'max worker threads', 900 ;  
GO  
RECONFIGURE;  
GO

修改立即生效无效重启。

服务器内存

使用min server memory和max server memory选项来配置SQL Server实例使用的内存。min server memory默认值为0,而max server memory默认值为2,147,483,647 megabytes (MB)。默认情况下,SQL Server可以根据可用的系统资源动态更改其内存要求。

max server memory所允许的最小内存量为128 MB。

将最大服务器内存值设置得太高可能会导致单个SQL Server实例可能不得不与同一主机上托管的其他SQL Server实例竞争内存。 但是,将此值设置得太低可能会导致严重的内存压力和性能问题。 将最大服务器内存设置为最小值甚至可以阻止SQL Server启动。 如果更改此选项后无法启动SQL Server,请使用-f启动选项将其启动,并将最大服务器内存重置为其以前的值。更多参考数据库引擎服务启动选项

min server memorymax server memory选项是高级选项。如果使用sp_configure系统存储过程来更改这些设置,则只有在将show advanced options设置为1时才能更改它们。这些设置将在不重新启动服务器的情况下立即生效。

使用min_server_memory可以保证SQL Server实例的SQL Server内存管理器可以使用的最小内存量。SQL Server将不会在启动时立即分配在min server memory中指定的内存量。但是,由于客户端负载而导致内存使用量达到该值之后,除非min server memory的值减小,否则SQL Server无法释放内存。 例如,当同一主机中可以同时存在多个SQL Server实例时,请设置min_server_memory参数而不是max_server_memory,以便为实例保留内存。 此外,在虚拟化环境中,设置min_server_memory值至关重要,以确保来自底层主机的内存压力不会试图从来宾SQL Server虚拟机(VM)上的缓冲池中释放达到可接受性能所需的内存。

使用max_server_memory以确保操作系统不会受到有害的内存压力。 若要设置最大服务器内存配置,请监视SQL Server进程的总体消耗,以确定内存需求。 为了更准确地针对单个实例进行以下计算:

  • 从操作系统总内存中,为操作系统本身保留1GB至4GB。
  • 然后减去max server memory控制之外的潜在SQL Server内存分配的等值,它由stack size * calculated max worker threads组成。剩下的应该是单个实例设置的max_server_memory。

对于x64 (64-bit)的OS上面安装的x64 (64-bit)的SQL Server,stack size 为2048 KB。max worker threads参考配置最大工作线程

例子

example1:设置max server memory为4GB

1
2
3
4
5
6
7
8
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'max server memory', 4096;
GO
RECONFIGURE;
GO

example2:获取当前内存分配

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
SELECT 
  physical_memory_in_use_kb/1024 AS sql_physical_memory_in_use_MB, 
	large_page_allocations_kb/1024 AS sql_large_page_allocations_MB, 
	locked_page_allocations_kb/1024 AS sql_locked_page_allocations_MB,
	virtual_address_space_reserved_kb/1024 AS sql_VAS_reserved_MB, 
	virtual_address_space_committed_kb/1024 AS sql_VAS_committed_MB, 
	virtual_address_space_available_kb/1024 AS sql_VAS_available_MB,
	page_fault_count AS sql_page_fault_count,
	memory_utilization_percentage AS sql_memory_utilization_percentage, 
	process_physical_memory_low AS sql_process_physical_memory_low, 
	process_virtual_memory_low AS sql_process_virtual_memory_low
FROM sys.dm_os_process_memory;

example3:获取 ‘max server memory (MB)‘值

1
2
SELECT c.value, c.value_in_use
FROM sys.configurations c WHERE c.[name] = 'max server memory (MB)'

管理数据库引擎服务

数据库引擎服务启动选项

启动选项使用不当会影响服务器性能,并可能阻止SQL Server启动。
使用"mssql"用户在Linux上启动SQL Server,以防止将来出现启动问题。示例:sudo -u mssql /opt/mssql/bin/sqlservr [STARTUP OPTIONS]

安装SQL Server时,安装程序会在Microsoft Windows注册表中写入一组默认的启动选项。您可以使用这些启动选项来指定备用主数据库文件,主数据库日志文件或错误日志文件。如果数据库引擎找不到所需的文件,则SQL Server将不会启动。

启动选项
选项 描述
-d master_file_path 是主数据库文件的标准路径(通常为C:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\master.mdf)。
-e error_log_path 是错误日志文件的标准路径(通常为C:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\LOG\ERRORLOG)。
-l master_log_path 是主数据库日志文件的标准路径(通常为C:\Program Files\Microsoft SQL Server\MSSQL.n\MSSQL\Data\mastlog.ldf)。

如果不提供这些选项,则使用现有的注册表参数。

选项 描述
-c 从命令提示符启动SQL Server时,缩短了启动时间。通常,SQL Server数据库引擎通过调用服务控制管理器作为服务启动。 因为从命令提示符启动时,SQL Server数据库引擎不会作为服务启动,所以请使用-c跳过此步骤。
-f 以最少的配置启动SQL Server实例。 如果配置值的设置(例如,过量使用内存)阻止了服务器启动,则此功能很有用。 以最小配置模式启动SQL Server会将SQL Server置于单用户模式。 有关更多信息,请参见以下有关-m的描述。
-kDecimalNumber 此启动参数限制每秒检查点I/O请求的数量,其中DecimalNumber表示每秒检查点速度,以MB为单位。更改此值可能会影响执行备份或执行恢复过程的速度,因此请谨慎操作。
-m 在单用户模式下启动SQL Server实例。 当以单用户模式启动SQL Server实例时,只有一个用户可以连接,并且CHECKPOINT进程不会启动。 CHECKPOINT确保已完成的事务有规律地从磁盘高速缓存写入数据库设备。 (通常,如果遇到应修复的系统数据库问题,则使用此选项。)启用sp_configure allow updates选项。 默认情况下,允许更新被禁用。 以单用户模式启动SQL Server可使计算机的本地Administrators组的任何成员作为sysadmin固定服务器角色的成员连接到SQL Server实例
-mClient Application Name 将连接限制为指定的客户端应用程序。 例如,-mSQLCMD将连接限制为单个连接,并且该连接必须将自身标识为SQLCMD客户端程序。 当以单用户模式启动SQL Server并且未知的客户端应用程序正在建立唯一的可用连接时,请使用此选项。客户端应用程序名称区分大小写。 如果应用程序名称包含空格或特殊字符,则需要双引号。例子:C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\sqlservr -s MSSQLSERVER -m"Microsoft SQL Server Management Studio - Query"C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Binn\sqlservr -s MSSQLSERVER -mSQLCMD
-n 不使用Windows应用程序日志来记录SQL Server事件。 如果使用 -n启动SQL Server实例,建议您也使用 -e启动选项。否则,将不会记录SQL Server事件。
-s 允许您启动SQL Server的命名实例。如果没有设置 -s参数,则默认实例将尝试启动。在启动sqlservr.exe之前,必须在命令提示符下切换到该实例的相应BINN目录。例如,如果Instance1将\mssql$Instance1用于其二进制文件,则用户必须位于\mssql$Instance1\binn目录中才能启动sqlservr.exe -s instance1
-T trace# 指示应使用有效的指定跟踪标志(trace#)启动SQL Server实例。 参见跟踪标志(Transact-SQL)
-x 禁用部分监视功能。警告:使用-x启动选项时,可用于诊断SQL Server性能和功能问题的信息将大大减少。
-E 增加为文件组中的每个文件分配的扩展区数。对于运行索引或数据扫描的用户数量有限的数据仓库应用程序,此选项可能很有用。 不应在其他应用程序中使用它,因为它可能会对性能产生不利影响。SQL Server的32位版本中不支持此选项。
使用启动选项进行故障排除

故障排除期间主要使用一些启动选项,例如单用户模式和最小配置模式。手动启动sqlservr.exe时,使用 -m-f选项启动服务器以进行故障排除最容易在命令行中进行。

使用net start启动SQL Server时,启动选项使用斜杠(/)代替连字符(-)。