news 2026/1/1 22:32:34

SQL SERVER——通过计划任务方式每月对配置数据、审计数据等进行备份

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SQL SERVER——通过计划任务方式每月对配置数据、审计数据等进行备份

1.设置当前Windows用户角色

-- 1. 在 msdb 中为登录名创建用户(如果尚未存在) USE msdb; CREATE USER [登录用户] FOR LOGIN [登录用户]; -- 2. 加入只读角色(关键!) ALTER ROLE SQLAgentReaderRole ADD MEMBER [登录用户]; USE msdb; CREATE USER [SKYL\winning] FOR LOGIN [登录用户]; GRANT SELECT ON dbo.sysjobs TO [登录用户]; -- 如果还需作业步骤、历史等,继续授权: GRANT SELECT ON dbo.sysjobsteps TO [登录用户]; GRANT SELECT ON dbo.sysjobhistory TO [登录用户];

2.创建备份脚本

命名为:monthly_backup_config_audit.ps1

修改实例名

# 启用严格模式和错误停止 Set-StrictMode -Version Latest $ErrorActionPreference = "Stop" try { Write-Host "开始月度备份任务..." -ForegroundColor Green # --- 原有逻辑放在这里 --- $DateStr = Get-Date -Format "yyyy-MM" $BackupRoot = "C:\DB_Backups\Monthly_Audit_Config\$DateStr" $SqlServerInstance = "localhost" # ← 请根据实际修改,可以用ip,端口! # 创建目录 $null = New-Item -ItemType Directory -Path $BackupRoot -Force # 导入模块(关键!) Import-Module SqlServer -ErrorAction Stop # 1. 导出配置数据(T-SQL 查询结果保存为 CSV) $ConfigQueries = @{ "Logins.csv" = "SELECT name, type_desc, create_date, is_disabled FROM sys.server_principals WHERE type IN ('S','U','G')" "ServerRoles.csv" = "SELECT sp.name AS login, sr.name AS role FROM sys.server_role_members rm JOIN sys.server_principals sp ON rm.member_principal_id = sp.principal_id JOIN sys.server_principals sr ON rm.role_principal_id = sr.principal_id" "LinkedServers.csv" = "SELECT name, product, provider, data_source FROM sys.servers WHERE is_linked = 1" "Jobs.csv" = "SELECT name, enabled, date_created FROM msdb.dbo.sysjobs" "ConfigSettings.csv" = "SELECT name, value,value_in_use, minimum, maximum, description FROM sys.configurations ORDER BY name;" } foreach ($file in $ConfigQueries.Keys) { $query = $ConfigQueries[$file] $outputPath = Join-Path $BackupRoot $file Invoke-Sqlcmd -ServerInstance $SqlServerInstance -Query $query -OutputAs DataTables | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8 } # 2. 复制默认跟踪文件(如果启用) try { $traceResult = Invoke-Sqlcmd -ServerInstance $SqlServerInstance -Query "SELECT path FROM sys.traces WHERE is_default = 1" if ($null -ne $traceResult -and $traceResult.Count -gt 0) { $DefaultTracePath = $traceResult[0].path # 安全取第一行 if ($DefaultTracePath) { $TraceDir = Split-Path $DefaultTracePath -Parent if (Test-Path $TraceDir) { $TraceFiles = Get-ChildItem -Path $TraceDir -Filter "log_*.trc" | Sort-Object LastWriteTime -Descending | Select-Object -First 5 foreach ($f in $TraceFiles) { Copy-Item $f.FullName -Destination $BackupRoot -ErrorAction SilentlyContinue } Write-Host "默认跟踪文件已备份。" } } } else { Write-Host "默认跟踪未启用,跳过跟踪文件备份。" -ForegroundColor Yellow } } catch { Write-Host "获取默认跟踪路径失败:$($_.Exception.Message)" -ForegroundColor Yellow } # 3. 复制 SQL Server Audit 文件(如有) $AuditPath = "C:\Audits\" # 替换为您实际的 Audit 文件路径 if (Test-Path $AuditPath) { $AuditFiles = Get-ChildItem -Path $AuditPath -Filter "*.sqlaudit" | Where-Object { $_.LastWriteTime -gt (Get-Date).AddMonths(-1) } foreach ($af in $AuditFiles) { Copy-Item $af.FullName -Destination $BackupRoot } } # 4. (可选)导出 Windows 登录事件(最近30天) $EventLogPath = Join-Path $BackupRoot "LoginEvents.evtx" wevtutil epl Application $EventLogPath /q:"*[System[Provider[@Name='MSSQLSERVER'] and (EventID=18456 or EventID=18453)]]" # 5. 压缩归档(可选) Compress-Archive -Path "$BackupRoot\*" -DestinationPath "$BackupRoot.zip" -Force Remove-Item -Path "$BackupRoot\*" -Exclude "*.zip" -Recurse Write-Host "? 月度配置与审计备份完成: $BackupRoot.zip" Write-Host "备份成功完成!" -ForegroundColor Green } catch { Write-Host "脚本执行失败:" -ForegroundColor Red Write-Host $_.Exception.Message -ForegroundColor Yellow Write-Host "堆栈跟踪:$($_.ScriptStackTrace)" -ForegroundColor Gray pause # 防止窗口关闭,便于查看错误 }

3.测试备份

  1. Win + R,输入powershell,回车 → 打开PowerShell 控制台

  2. 手动执行脚本

cd C:\Scripts .\monthly_backup_config_audit.ps1

查看备份目录是否有文件,如果有的话,即成功,否则需要排查问题;

4.创建任务计划

  1. 打开任务计划程序

  2. 创建任务 → 名称:Monthly SQL Config & Audit Backup

  3. 触发器:每月(如每月1号 2:00 AM)

  4. 操作:

    • 程序:powershell.exe路径

    • 参数:-ExecutionPolicy Bypass -WindowStyle Hidden -File "C:\Script\monthly_backup_config_audit.ps1"

  5. “常规”选项卡:

    • 使用最高权限运行

    • 选择专用服务账户(如svc-sqlbackup

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/25 12:55:55

测试网部署全流程:自研 dApp 上线 Goerli 测试链并验证功能

Goerli( Grli )是以太坊官方推荐的 PoA 测试网,兼容以太坊主网生态,是 dApp 上线主网前验证功能、测试交互的核心环境。本文以「Hardhat 框架 Solidity 智能合约 React 前端」为例,完整讲解 dApp 部署到 Goerli 测试…

作者头像 李华
网站建设 2025/12/21 22:13:27

纯电动汽车仿真:从模型搭建到动力性与经济性分析

纯电动汽车仿真、纯电动公交、纯电动客车、纯电动汽车动力性仿真、经济性仿真。 模型包括电机、电池、车辆模型。 有两种模型2选1: 1 完全用matlab simulink搭建的模型。 2用simscape搭建的车辆模型。 项目开发使用的模型,精确度高,不是随便乱…

作者头像 李华
网站建设 2025/12/22 1:06:47

新能源控制器中多峰值MPPT寻优仿真模型探索

新能源控制器,多峰值mppt寻优仿真模型,传统扰动电导等寻优无法用在局部遮阴下,而粒子群pso算法克服了这个问题,可用于自行研究。 压缩包附带使用说明及解析文档,包括传统扰动与粒子群算法模型。在新能源领域&#xff0…

作者头像 李华
网站建设 2025/12/21 21:40:32

双向DC/DC磷酸铁锂蓄电池充放电储能的Matlab/Simulink仿真模型探索

双向DC/DC磷酸铁锂蓄电池充放电储能matlab/simulink仿真模型,采用双闭环控制,充放电电流,电压和功率均可控,电流为负则充电,电流为正则放电,可以控制电流实现充放电 (1)完整复现文献…

作者头像 李华
网站建设 2025/12/22 11:52:28

含多种需求响应及电动汽车的微网/虚拟电厂日前优化调度探索

含多种需求响应及电动汽车的微网/虚拟电厂日前优化调度3 关键词:需求响应 空调负荷 电动汽车 微网优化调度 虚拟电厂调度 参考文档:《计及电动汽车和需求响应的多类电力市场下虚拟电厂竞标模型》参考其电动汽车模型以及需求响应模型; 《S…

作者头像 李华