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_EULA
和SA_PASSWORD
,还可以使用MSSQL_PID
来设置产品ID,默认为Developer
,可以设置为Express、Standard、Enterprise和EnterpriseCore。
完整的环境变量列表可以在这里看到。
检查容器运行
使用docker ps
命令查看你的docker容器:
如果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
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上使用ifconfig或ip 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 memory和max 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时,启动选项使用斜杠(/)代替连字符(-)。