Я не знаю, как вы можете попасть в SMO через VB6. Я бы согласился с G Mastros относительно использования подхода COM / Interop для непосредственной реализации кода .NET.
Альтернативой для рассмотрения является то, что вы можете использовать Shell для PowerShell, выполняя сценарий, который будет выполнять вашу работу .NET SMO. У вас все еще есть предварительное условие для требования .NET Framework (и, конечно, Powershell), но это сделает работу. Ваш скрипт может принимать параметры для учетных данных, имени базы данных, типа резервной копии и т. Д.
Я часто это реализую на клиентах, у которых есть SQL Express (нет агента SQL для резервного копирования, как MSDE). Я подключаю запланированное задание, которое вызывает скрипт и управляет его резервным копированием.
Если полезно, вот сценарий - в основном украден, но я несколько изменил его:
param (
[string] $ServerName,
[string] $DatabaseName,
[string] $Backuptype,
[string] $BackupPath,
[int] $NumDays
)
Get-ChildItem $BackupPath | where {$_.LastWriteTime -le (Get-Date).AddDays(-$NumDays)} | remove-item
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | out-null
[System.IO.Directory]::CreateDirectory($BackupPath) | out-null
$srv=New-Object "Microsoft.SqlServer.Management.Smo.Server" "$servername"
$bck=new-object "Microsoft.SqlServer.Management.Smo.Backup"
if ($Backuptype -eq "FULL")
{
$bck.Action = 'Database'
$extenstion=".BAK"
$text1="Full Backup"
}
if ($Backuptype -eq "TRAN")
{
$bck.Action = 'Log'
$bck.LogTruncation = 2
$extenstion=".TRN"
$text1="Transactional Log Backup"
}
if ($Backuptype -eq "DIFF")
{
$bck.Incremental = 1
$extenstion=".DIFF"
$text1="Differential Backup"
}
$fil=new-object "Microsoft.SqlServer.Management.Smo.BackupDeviceItem"
$fil.DeviceType='File'
$fil.Name=[System.IO.Path]::Combine($BackupPath, $DatabaseName+ "_"+ [DateTime]::Now.ToString("yyyy_MM_dd_HH_mm")+$extenstion)
$bck.Devices.Add($fil)
$bck.Database=$DatabaseName
$bck.SqlBackup($srv)
write-host $text1 of $Databasename done
Он может выполнять полное, разностное и транзакционное резервное копирование и однозначно присваивать имена каждому полученному файлу на основе даты и времени, удаляя все файлы старше определенного количества дней.
Синтаксис для его вызова:
.\Backup.ps1 INSTANCENAME DATABASENAME FULL|TRAN|DIFF PATH DAYSTOKEEP
так ...
.\Backup.ps1 SQLEXPRESS Northwind FULL C:\TempHold\Test 30
.\Backup.ps1 SQLEXPRESS Northwind TRAN C:\TempHold\Test 30
.\Backup.ps1 SQLEXPRESS Northwind DIFF C:\TempHold\Test 30
Для составления расписания в планировщике заданий введите:
powershell c:\temphold\test\backup.ps1 "SQLEXPRESS Northwind DIFF C:\TempHold\Test 30"