热帖

我们在搭建网狐端的时候数据库很多,需要一个一个的去还原,这里我做了一个一键还原脚本

只需要修改数据库的实例名 数据库保存路径执行命令就可以还原数据库

命令:

# 加载SQL Server管理对象
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null

# 配置参数
$sqlServer = "10_0_28_3"  # SQL Server实例名
$backupFolder = "D:\Backup"     # 备份文件存放目录
$dataFolder = "D:\Data"  # 数据文件存放目录

# 创建目录(如果不存在)
if (!(Test-Path -Path $backupFolder)) {
    New-Item -ItemType Directory -Path $backupFolder | Out-Null
}

# 获取所有.bak文件
$bakFiles = Get-ChildItem -Path $backupFolder -Filter "*.bak"

foreach ($file in $bakFiles) {
    try {
        $dbName = [System.IO.Path]::GetFileNameWithoutExtension($file.Name)
        $backupFile = $file.FullName
        
        # 首先获取备份文件中的逻辑文件名
        $getFileListSQL = @"
        RESTORE FILELISTONLY FROM DISK = N'$backupFile'
"@
        $fileList = Invoke-Sqlcmd -ServerInstance $sqlServer -Query $getFileListSQL -TrustServerCertificate
        
        # 提取逻辑文件名(假设第一个是数据文件,第二个是日志文件)
        $dataLogicalName = $fileList[0].LogicalName
        $logLogicalName = $fileList[1].LogicalName
        
        # 确保数据目录存在
        if (!(Test-Path -Path $dataFolder)) {
            New-Item -ItemType Directory -Path $dataFolder | Out-Null
        }
        
        # 构建还原语句
        $restoreSQL = @"
        RESTORE DATABASE [$dbName] 
        FROM DISK = N'$backupFile'
        WITH FILE = 1,  
        MOVE N'$dataLogicalName' TO N'$dataFolder\$dbName.mdf',  
        MOVE N'$logLogicalName' TO N'$dataFolder\${dbName}_log.ldf',  
        NOUNLOAD, REPLACE, STATS = 5;
"@
        
        Write-Host "正在还原数据库: $dbName ..."
        Invoke-Sqlcmd -ServerInstance $sqlServer -Query $restoreSQL -QueryTimeout 0 -TrustServerCertificate
        Write-Host "成功还原数据库: $dbName" -ForegroundColor Green
        
        # 设置数据库为简单恢复模式(可选)
        $setRecoverySQL = "ALTER DATABASE [$dbName] SET RECOVERY SIMPLE WITH NO_WAIT"
        Invoke-Sqlcmd -ServerInstance $sqlServer -Query $setRecoverySQL -TrustServerCertificate
    }
    catch {
        Write-Host "还原数据库 $dbName 时出错: $_" -ForegroundColor Red
    }
}

Write-Host "所有数据库还原操作完成"
历史上的今天
05月
9
    抱歉,历史上的今天作者很懒,什么都没写!
版权声明:原创作品,未经允许不得转载,否则将追究法律责任。
本站资源有的自互联网收集整理,如果侵犯了您的合法权益,请联系本站我们会及时删除。
本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。
本文链接:帽子资源网https://www.maoziw.com/202505092097.html
许可协议:《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权