提交sql server 脚本
This commit is contained in:
parent
c571b670c3
commit
a9b9dcdcec
217
DockerComposeShells/SQLServer-README.md
Normal file
217
DockerComposeShells/SQLServer-README.md
Normal file
@ -0,0 +1,217 @@
|
|||||||
|
# SQL Server 2022 Linux Docker Compose 部署指南
|
||||||
|
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
这是一个完整的SQL Server 2022 Linux Docker Compose部署方案,包含数据库初始化、用户管理、性能优化等配置。
|
||||||
|
|
||||||
|
## 文件结构
|
||||||
|
|
||||||
|
```
|
||||||
|
├── docker-compose-sqlserver.yml # Docker Compose 配置文件
|
||||||
|
├── sqlserver.env # 环境变量配置文件
|
||||||
|
├── sqlserver/ # SQL Server 相关目录
|
||||||
|
│ ├── init/ # 初始化脚本目录
|
||||||
|
│ │ ├── 01-create-database.sql # 创建数据库和表
|
||||||
|
│ │ ├── 02-create-user.sql # 创建用户和权限
|
||||||
|
│ │ └── 03-performance-config.sql # 性能优化配置
|
||||||
|
│ ├── data/ # 数据文件目录
|
||||||
|
│ ├── logs/ # 日志文件目录
|
||||||
|
│ ├── backup/ # 备份文件目录
|
||||||
|
│ └── web-config/ # Web管理界面配置
|
||||||
|
└── SQLServer-README.md # 本说明文档
|
||||||
|
```
|
||||||
|
|
||||||
|
## 快速开始
|
||||||
|
|
||||||
|
### 1. 配置环境变量
|
||||||
|
|
||||||
|
复制并修改环境变量文件:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp sqlserver.env .env
|
||||||
|
```
|
||||||
|
|
||||||
|
编辑 `.env` 文件,修改以下关键配置:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 修改SA密码(必须)
|
||||||
|
SQLSERVER_SA_PASSWORD=YourStrong@Password123!
|
||||||
|
|
||||||
|
# 修改端口(可选,避免冲突)
|
||||||
|
SQLSERVER_PORT=1433
|
||||||
|
|
||||||
|
# 选择SQL Server版本
|
||||||
|
SQLSERVER_EDITION=Developer # 免费开发版本
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 启动服务
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 启动SQL Server
|
||||||
|
docker-compose -f docker-compose-sqlserver.yml --env-file .env up -d
|
||||||
|
|
||||||
|
# 查看服务状态
|
||||||
|
docker-compose -f docker-compose-sqlserver.yml ps
|
||||||
|
|
||||||
|
# 查看日志
|
||||||
|
docker-compose -f docker-compose-sqlserver.yml logs -f sqlserver
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 连接数据库
|
||||||
|
|
||||||
|
#### 使用 sqlcmd 连接
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 进入容器
|
||||||
|
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!'
|
||||||
|
|
||||||
|
# 或者直接执行SQL
|
||||||
|
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -Q "SELECT name FROM sys.databases"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 使用外部工具连接
|
||||||
|
|
||||||
|
- **服务器**: `localhost` 或你的服务器IP
|
||||||
|
- **端口**: `1433`(或你在.env中配置的端口)
|
||||||
|
- **用户名**: `sa`
|
||||||
|
- **密码**: 你在.env中配置的密码
|
||||||
|
- **数据库**: `SampleDB`(初始化脚本创建的示例数据库)
|
||||||
|
|
||||||
|
## 配置说明
|
||||||
|
|
||||||
|
### SQL Server 版本选择
|
||||||
|
|
||||||
|
在 `sqlserver.env` 中配置 `SQLSERVER_EDITION`:
|
||||||
|
|
||||||
|
- `Developer`: 免费开发版本(推荐用于开发环境)
|
||||||
|
- `Express`: 免费轻量版本
|
||||||
|
- `Standard`: 标准版
|
||||||
|
- `Enterprise`: 企业版
|
||||||
|
|
||||||
|
### 资源限制
|
||||||
|
|
||||||
|
默认配置:
|
||||||
|
- CPU限制: 4核心
|
||||||
|
- 内存限制: 8GB
|
||||||
|
- 数据目录: `./sqlserver/data`
|
||||||
|
- 日志目录: `./sqlserver/logs`
|
||||||
|
|
||||||
|
### 网络配置
|
||||||
|
|
||||||
|
- 默认端口: 1433
|
||||||
|
- 网络子网: 172.24.0.0/16
|
||||||
|
- 容器间通信: 通过 `sqlserver-net` 网络
|
||||||
|
|
||||||
|
## 初始化脚本说明
|
||||||
|
|
||||||
|
### 01-create-database.sql
|
||||||
|
- 创建 `SampleDB` 示例数据库
|
||||||
|
- 创建 `Users` 示例表
|
||||||
|
- 插入示例数据
|
||||||
|
- 创建 `GetActiveUsers` 存储过程
|
||||||
|
|
||||||
|
### 02-create-user.sql
|
||||||
|
- 创建 `appuser` 应用程序用户
|
||||||
|
- 配置用户权限
|
||||||
|
- 授予必要的数据库权限
|
||||||
|
|
||||||
|
### 03-performance-config.sql
|
||||||
|
- 配置最大内存使用量
|
||||||
|
- 设置最大并行度
|
||||||
|
- 启用查询存储
|
||||||
|
- 创建性能监控视图
|
||||||
|
|
||||||
|
## 常用操作
|
||||||
|
|
||||||
|
### 备份数据库
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 创建备份
|
||||||
|
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -Q "BACKUP DATABASE SampleDB TO DISK = '/var/opt/mssql/backup/SampleDB.bak'"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 恢复数据库
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 恢复备份
|
||||||
|
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -Q "RESTORE DATABASE SampleDB FROM DISK = '/var/opt/mssql/backup/SampleDB.bak'"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 查看性能统计
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看性能统计
|
||||||
|
docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'YourStrong@Password123!' -d SampleDB -Q "SELECT * FROM PerformanceStats"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 停止和清理
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 停止服务
|
||||||
|
docker-compose -f docker-compose-sqlserver.yml down
|
||||||
|
|
||||||
|
# 停止并删除数据卷(谨慎使用)
|
||||||
|
docker-compose -f docker-compose-sqlserver.yml down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## 故障排除
|
||||||
|
|
||||||
|
### 常见问题
|
||||||
|
|
||||||
|
1. **容器启动失败**
|
||||||
|
- 检查密码是否符合复杂度要求
|
||||||
|
- 确保端口没有被占用
|
||||||
|
- 查看容器日志: `docker-compose logs sqlserver`
|
||||||
|
|
||||||
|
2. **连接失败**
|
||||||
|
- 确认防火墙设置
|
||||||
|
- 检查网络配置
|
||||||
|
- 验证用户名和密码
|
||||||
|
|
||||||
|
3. **性能问题**
|
||||||
|
- 调整内存限制
|
||||||
|
- 检查磁盘空间
|
||||||
|
- 查看性能监控视图
|
||||||
|
|
||||||
|
### 日志查看
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 查看SQL Server日志
|
||||||
|
docker-compose -f docker-compose-sqlserver.yml logs sqlserver
|
||||||
|
|
||||||
|
# 查看系统日志
|
||||||
|
docker exec -it sqlserver-2022 cat /var/opt/mssql/log/errorlog
|
||||||
|
```
|
||||||
|
|
||||||
|
## 安全建议
|
||||||
|
|
||||||
|
1. **修改默认密码**: 使用强密码
|
||||||
|
2. **限制网络访问**: 配置防火墙规则
|
||||||
|
3. **定期备份**: 设置自动备份策略
|
||||||
|
4. **监控访问**: 启用审计日志
|
||||||
|
5. **更新补丁**: 定期更新SQL Server镜像
|
||||||
|
|
||||||
|
## 扩展功能
|
||||||
|
|
||||||
|
### 添加更多数据库
|
||||||
|
|
||||||
|
在 `sqlserver/init/` 目录下创建新的 `.sql` 文件,它们将按文件名顺序执行。
|
||||||
|
|
||||||
|
### 集成其他服务
|
||||||
|
|
||||||
|
可以将此SQL Server配置集成到现有的Docker Compose网络中:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
networks:
|
||||||
|
- your-existing-network
|
||||||
|
```
|
||||||
|
|
||||||
|
## 许可证
|
||||||
|
|
||||||
|
SQL Server 2022 Developer Edition 可免费用于开发和测试环境。生产环境请确保使用适当的许可证。
|
||||||
|
|
||||||
|
## 支持
|
||||||
|
|
||||||
|
如有问题,请查看:
|
||||||
|
- [SQL Server 2022 官方文档](https://docs.microsoft.com/en-us/sql/sql-server/)
|
||||||
|
- [Docker Hub SQL Server 页面](https://hub.docker.com/_/microsoft-mssql-server)
|
||||||
91
DockerComposeShells/docker-compose-sqlserver.yml
Normal file
91
DockerComposeShells/docker-compose-sqlserver.yml
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
sqlserver:
|
||||||
|
image: mcr.microsoft.com/mssql/server:2022-latest
|
||||||
|
container_name: sqlserver-2022
|
||||||
|
hostname: sqlserver-2022
|
||||||
|
restart: unless-stopped
|
||||||
|
privileged: true
|
||||||
|
ports:
|
||||||
|
- "${SQLSERVER_PORT}:1433"
|
||||||
|
environment:
|
||||||
|
- ACCEPT_EULA=Y
|
||||||
|
- SA_PASSWORD=${SQLSERVER_SA_PASSWORD}
|
||||||
|
- MSSQL_PID=${SQLSERVER_EDITION}
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
volumes:
|
||||||
|
- sqlserver-data:/var/opt/mssql
|
||||||
|
- sqlserver-logs:/var/opt/mssql/log
|
||||||
|
- ./sqlserver/init:/docker-entrypoint-initdb.d
|
||||||
|
- ./sqlserver/backup:/var/opt/mssql/backup
|
||||||
|
deploy:
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: "4.0"
|
||||||
|
memory: 8g
|
||||||
|
reservations:
|
||||||
|
cpus: "2.0"
|
||||||
|
memory: 4g
|
||||||
|
networks:
|
||||||
|
- sqlserver-net
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "/opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SQLSERVER_SA_PASSWORD} -Q 'SELECT 1' || exit 1"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 5
|
||||||
|
start_period: 60s
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
|
||||||
|
# SQL Server Management Studio (可选,基于Web的管理界面)
|
||||||
|
sqlserver-web:
|
||||||
|
image: mcr.microsoft.com/mssql/server:2022-latest
|
||||||
|
container_name: sqlserver-web
|
||||||
|
hostname: sqlserver-web
|
||||||
|
restart: unless-stopped
|
||||||
|
ports:
|
||||||
|
- "${SQLSERVER_WEB_PORT}:8080"
|
||||||
|
environment:
|
||||||
|
- ACCEPT_EULA=Y
|
||||||
|
- SA_PASSWORD=${SQLSERVER_SA_PASSWORD}
|
||||||
|
- MSSQL_PID=${SQLSERVER_EDITION}
|
||||||
|
- TZ=Asia/Shanghai
|
||||||
|
volumes:
|
||||||
|
- ./sqlserver/web-config:/var/opt/mssql/web-config
|
||||||
|
depends_on:
|
||||||
|
sqlserver:
|
||||||
|
condition: service_healthy
|
||||||
|
networks:
|
||||||
|
- sqlserver-net
|
||||||
|
command: >
|
||||||
|
/bin/bash -c "
|
||||||
|
# 安装SQL Server Web管理工具
|
||||||
|
apt-get update && apt-get install -y curl wget &&
|
||||||
|
# 这里可以添加Web管理界面的安装脚本
|
||||||
|
echo 'SQL Server Web management interface ready' &&
|
||||||
|
tail -f /dev/null
|
||||||
|
"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
sqlserver-net:
|
||||||
|
driver: bridge
|
||||||
|
ipam:
|
||||||
|
driver: default
|
||||||
|
config:
|
||||||
|
- subnet: 172.24.0.0/16
|
||||||
|
gateway: 172.24.0.1
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
sqlserver-data:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
o: bind
|
||||||
|
device: ./sqlserver/data
|
||||||
|
sqlserver-logs:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
type: none
|
||||||
|
o: bind
|
||||||
|
device: ./sqlserver/logs
|
||||||
40
DockerComposeShells/sqlserver.env
Normal file
40
DockerComposeShells/sqlserver.env
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# SQL Server 2022 Linux Docker Compose 环境变量配置
|
||||||
|
|
||||||
|
# SQL Server 配置
|
||||||
|
# 端口配置
|
||||||
|
SQLSERVER_PORT=1433
|
||||||
|
SQLSERVER_WEB_PORT=8080
|
||||||
|
|
||||||
|
# 认证配置
|
||||||
|
# SA用户密码(请修改为强密码)
|
||||||
|
SQLSERVER_SA_PASSWORD=YourStrong@Password123!
|
||||||
|
|
||||||
|
# SQL Server 版本配置
|
||||||
|
# 可选值: Developer, Express, Standard, Enterprise, EnterpriseCore
|
||||||
|
# Developer: 免费开发版本
|
||||||
|
# Express: 免费轻量版本
|
||||||
|
# Standard: 标准版
|
||||||
|
# Enterprise: 企业版
|
||||||
|
SQLSERVER_EDITION=Developer
|
||||||
|
|
||||||
|
# 时区配置
|
||||||
|
TZ=Asia/Shanghai
|
||||||
|
|
||||||
|
# 资源限制配置
|
||||||
|
# CPU限制(核心数)
|
||||||
|
SQLSERVER_CPU_LIMIT=4.0
|
||||||
|
SQLSERVER_CPU_RESERVATION=2.0
|
||||||
|
|
||||||
|
# 内存限制(GB)
|
||||||
|
SQLSERVER_MEMORY_LIMIT=8g
|
||||||
|
SQLSERVER_MEMORY_RESERVATION=4g
|
||||||
|
|
||||||
|
# 数据目录配置
|
||||||
|
SQLSERVER_DATA_DIR=./sqlserver/data
|
||||||
|
SQLSERVER_LOG_DIR=./sqlserver/logs
|
||||||
|
SQLSERVER_BACKUP_DIR=./sqlserver/backup
|
||||||
|
SQLSERVER_INIT_DIR=./sqlserver/init
|
||||||
|
|
||||||
|
# 网络配置
|
||||||
|
SQLSERVER_NETWORK_SUBNET=172.24.0.0/16
|
||||||
|
SQLSERVER_NETWORK_GATEWAY=172.24.0.1
|
||||||
75
DockerComposeShells/sqlserver/init/01-create-database.sql
Normal file
75
DockerComposeShells/sqlserver/init/01-create-database.sql
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
-- SQL Server 2022 初始化脚本
|
||||||
|
-- 创建示例数据库和用户
|
||||||
|
|
||||||
|
-- 创建示例数据库
|
||||||
|
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = 'SampleDB')
|
||||||
|
BEGIN
|
||||||
|
CREATE DATABASE SampleDB;
|
||||||
|
PRINT '数据库 SampleDB 创建成功';
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
BEGIN
|
||||||
|
PRINT '数据库 SampleDB 已存在';
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 使用 SampleDB 数据库
|
||||||
|
USE SampleDB;
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 创建示例表
|
||||||
|
IF NOT EXISTS (SELECT * FROM sysobjects WHERE name='Users' AND xtype='U')
|
||||||
|
BEGIN
|
||||||
|
CREATE TABLE Users (
|
||||||
|
Id INT IDENTITY(1,1) PRIMARY KEY,
|
||||||
|
Username NVARCHAR(50) NOT NULL UNIQUE,
|
||||||
|
Email NVARCHAR(100) NOT NULL,
|
||||||
|
CreatedDate DATETIME2 DEFAULT GETDATE(),
|
||||||
|
IsActive BIT DEFAULT 1
|
||||||
|
);
|
||||||
|
PRINT '表 Users 创建成功';
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
BEGIN
|
||||||
|
PRINT '表 Users 已存在';
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 插入示例数据
|
||||||
|
IF NOT EXISTS (SELECT * FROM Users WHERE Username = 'admin')
|
||||||
|
BEGIN
|
||||||
|
INSERT INTO Users (Username, Email) VALUES
|
||||||
|
('admin', 'admin@example.com'),
|
||||||
|
('user1', 'user1@example.com'),
|
||||||
|
('user2', 'user2@example.com');
|
||||||
|
PRINT '示例数据插入成功';
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
BEGIN
|
||||||
|
PRINT '示例数据已存在';
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 创建存储过程
|
||||||
|
IF NOT EXISTS (SELECT * FROM sys.objects WHERE type = 'P' AND name = 'GetActiveUsers')
|
||||||
|
BEGIN
|
||||||
|
EXEC('
|
||||||
|
CREATE PROCEDURE GetActiveUsers
|
||||||
|
AS
|
||||||
|
BEGIN
|
||||||
|
SET NOCOUNT ON;
|
||||||
|
SELECT Id, Username, Email, CreatedDate
|
||||||
|
FROM Users
|
||||||
|
WHERE IsActive = 1
|
||||||
|
ORDER BY CreatedDate DESC;
|
||||||
|
END
|
||||||
|
');
|
||||||
|
PRINT '存储过程 GetActiveUsers 创建成功';
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
BEGIN
|
||||||
|
PRINT '存储过程 GetActiveUsers 已存在';
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
PRINT 'SQL Server 初始化完成!';
|
||||||
43
DockerComposeShells/sqlserver/init/02-create-user.sql
Normal file
43
DockerComposeShells/sqlserver/init/02-create-user.sql
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
-- 创建应用程序用户和权限配置
|
||||||
|
|
||||||
|
-- 创建应用程序用户
|
||||||
|
IF NOT EXISTS (SELECT * FROM sys.server_principals WHERE name = 'appuser')
|
||||||
|
BEGIN
|
||||||
|
CREATE LOGIN appuser WITH PASSWORD = 'AppUser@Password123!';
|
||||||
|
PRINT '登录用户 appuser 创建成功';
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
BEGIN
|
||||||
|
PRINT '登录用户 appuser 已存在';
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 在 SampleDB 数据库中创建用户
|
||||||
|
USE SampleDB;
|
||||||
|
GO
|
||||||
|
|
||||||
|
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name = 'appuser')
|
||||||
|
BEGIN
|
||||||
|
CREATE USER appuser FOR LOGIN appuser;
|
||||||
|
PRINT '数据库用户 appuser 创建成功';
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
BEGIN
|
||||||
|
PRINT '数据库用户 appuser 已存在';
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 授予权限
|
||||||
|
-- 授予对 Users 表的读写权限
|
||||||
|
GRANT SELECT, INSERT, UPDATE, DELETE ON Users TO appuser;
|
||||||
|
PRINT '授予 Users 表权限成功';
|
||||||
|
|
||||||
|
-- 授予执行存储过程的权限
|
||||||
|
GRANT EXECUTE ON GetActiveUsers TO appuser;
|
||||||
|
PRINT '授予存储过程执行权限成功';
|
||||||
|
|
||||||
|
-- 授予创建表的权限(如果需要)
|
||||||
|
GRANT CREATE TABLE TO appuser;
|
||||||
|
PRINT '授予创建表权限成功';
|
||||||
|
|
||||||
|
PRINT '用户权限配置完成!';
|
||||||
60
DockerComposeShells/sqlserver/init/03-performance-config.sql
Normal file
60
DockerComposeShells/sqlserver/init/03-performance-config.sql
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
-- SQL Server 性能优化配置
|
||||||
|
|
||||||
|
-- 启用即时文件初始化(需要重启服务)
|
||||||
|
EXEC sp_configure 'show advanced options', 1;
|
||||||
|
RECONFIGURE;
|
||||||
|
EXEC sp_configure 'xp_cmdshell', 1;
|
||||||
|
RECONFIGURE;
|
||||||
|
PRINT '高级选项已启用';
|
||||||
|
|
||||||
|
-- 配置最大内存使用量(根据容器内存限制调整)
|
||||||
|
-- 这里设置为4GB,可以根据实际需要调整
|
||||||
|
EXEC sp_configure 'max server memory (MB)', 4096;
|
||||||
|
RECONFIGURE;
|
||||||
|
PRINT '最大内存设置为 4GB';
|
||||||
|
|
||||||
|
-- 配置最大并行度(根据CPU核心数调整)
|
||||||
|
EXEC sp_configure 'max degree of parallelism', 4;
|
||||||
|
RECONFIGURE;
|
||||||
|
PRINT '最大并行度设置为 4';
|
||||||
|
|
||||||
|
-- 启用查询存储(SQL Server 2016+)
|
||||||
|
USE SampleDB;
|
||||||
|
GO
|
||||||
|
|
||||||
|
-- 启用查询存储
|
||||||
|
ALTER DATABASE SampleDB SET QUERY_STORE = ON;
|
||||||
|
ALTER DATABASE SampleDB SET QUERY_STORE (
|
||||||
|
OPERATION_MODE = READ_WRITE,
|
||||||
|
CLEANUP_POLICY = (STALE_QUERY_THRESHOLD_DAYS = 30),
|
||||||
|
DATA_FLUSH_INTERVAL_SECONDS = 900,
|
||||||
|
INTERVAL_LENGTH_MINUTES = 60,
|
||||||
|
MAX_STORAGE_SIZE_MB = 1000,
|
||||||
|
QUERY_CAPTURE_MODE = AUTO,
|
||||||
|
SIZE_BASED_CLEANUP_MODE = AUTO
|
||||||
|
);
|
||||||
|
PRINT '查询存储已启用';
|
||||||
|
|
||||||
|
-- 创建性能监控视图
|
||||||
|
USE SampleDB;
|
||||||
|
GO
|
||||||
|
|
||||||
|
IF NOT EXISTS (SELECT * FROM sys.views WHERE name = 'PerformanceStats')
|
||||||
|
BEGIN
|
||||||
|
EXEC('
|
||||||
|
CREATE VIEW PerformanceStats AS
|
||||||
|
SELECT
|
||||||
|
GETDATE() AS CheckTime,
|
||||||
|
(SELECT COUNT(*) FROM sys.dm_exec_sessions WHERE is_user_process = 1) AS ActiveConnections,
|
||||||
|
(SELECT COUNT(*) FROM sys.dm_exec_requests WHERE status IN (''running'', ''runnable'', ''suspended'')) AS ActiveRequests,
|
||||||
|
(SELECT SUM(pages_kb) FROM sys.dm_os_memory_clerks WHERE type = ''MEMORYCLERK_SQLBUFFERPOOL'') / 1024 AS BufferPoolMB
|
||||||
|
');
|
||||||
|
PRINT '性能监控视图创建成功';
|
||||||
|
END
|
||||||
|
ELSE
|
||||||
|
BEGIN
|
||||||
|
PRINT '性能监控视图已存在';
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
PRINT '性能优化配置完成!';
|
||||||
68
DockerComposeShells/start-sqlserver.sh
Normal file
68
DockerComposeShells/start-sqlserver.sh
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# SQL Server 2022 Linux Docker Compose 启动脚本
|
||||||
|
|
||||||
|
echo "=========================================="
|
||||||
|
echo "SQL Server 2022 Linux Docker Compose 启动脚本"
|
||||||
|
echo "=========================================="
|
||||||
|
|
||||||
|
# 检查是否存在环境变量文件
|
||||||
|
if [ ! -f ".env" ]; then
|
||||||
|
echo "警告: 未找到 .env 文件"
|
||||||
|
echo "正在从 sqlserver.env 创建 .env 文件..."
|
||||||
|
cp sqlserver.env .env
|
||||||
|
echo "请编辑 .env 文件,特别是修改 SQLSERVER_SA_PASSWORD"
|
||||||
|
echo "然后重新运行此脚本"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查Docker是否运行
|
||||||
|
if ! docker info > /dev/null 2>&1; then
|
||||||
|
echo "错误: Docker 未运行,请先启动 Docker"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 检查Docker Compose是否可用
|
||||||
|
if ! command -v docker-compose &> /dev/null; then
|
||||||
|
echo "错误: docker-compose 未安装"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "正在启动 SQL Server 2022..."
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# 创建必要的目录
|
||||||
|
echo "创建目录结构..."
|
||||||
|
mkdir -p sqlserver/data sqlserver/logs sqlserver/backup sqlserver/web-config
|
||||||
|
|
||||||
|
# 启动服务
|
||||||
|
echo "启动 Docker Compose 服务..."
|
||||||
|
docker-compose -f docker-compose-sqlserver.yml --env-file .env up -d
|
||||||
|
|
||||||
|
# 等待服务启动
|
||||||
|
echo "等待 SQL Server 启动..."
|
||||||
|
sleep 10
|
||||||
|
|
||||||
|
# 检查服务状态
|
||||||
|
echo ""
|
||||||
|
echo "检查服务状态..."
|
||||||
|
docker-compose -f docker-compose-sqlserver.yml ps
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "=========================================="
|
||||||
|
echo "启动完成!"
|
||||||
|
echo "=========================================="
|
||||||
|
echo ""
|
||||||
|
echo "连接信息:"
|
||||||
|
echo " 服务器: localhost"
|
||||||
|
echo " 端口: $(grep SQLSERVER_PORT .env | cut -d'=' -f2)"
|
||||||
|
echo " 用户名: sa"
|
||||||
|
echo " 密码: $(grep SQLSERVER_SA_PASSWORD .env | cut -d'=' -f2)"
|
||||||
|
echo " 示例数据库: SampleDB"
|
||||||
|
echo ""
|
||||||
|
echo "常用命令:"
|
||||||
|
echo " 查看日志: docker-compose -f docker-compose-sqlserver.yml logs -f sqlserver"
|
||||||
|
echo " 停止服务: docker-compose -f docker-compose-sqlserver.yml down"
|
||||||
|
echo " 进入容器: docker exec -it sqlserver-2022 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P '$(grep SQLSERVER_SA_PASSWORD .env | cut -d'=' -f2)'"
|
||||||
|
echo ""
|
||||||
|
echo "详细说明请查看 SQLServer-README.md"
|
||||||
Loading…
x
Reference in New Issue
Block a user