Exception calling "SqlBackup" with "1" argument(s)

Az egyik szerverünkön az alábbi PowerShell script végzi az SQL Server adatbázisok mentését:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SMO") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoExtended") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.ConnectionInfo") | Out-Null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.SmoEnum") | Out-Null

$server = New-Object ("Microsoft.SqlServer.Management.Smo.Server") $dbInstance
$backup = New-Object ("Microsoft.SqlServer.Management.Smo.Backup")
$backup.Action = "Database"
$backup.BackupSetDescription = "Full backup of " + $dbName
$backup.BackupSetName = $dbName + " backup"
$backup.Database = $dbName
$backup.MediaDescription = "Disk"
$backup.Devices.AddDevice("$localSqlBackupPath", "File")
$backup.SqlBackup($server)

Ez a kód most már évek óta működik rendesen, szépen készülnek a backupok naponta. Ám az utóbbi időben érdekesen kezdett viselkedni a szkript: egyes adatbázisokat mindig lementett, másokat pedig – amikkel korábban nem volt gond – többnyire nem. A naplóba az alábbi hibaüzenet került:

Exception calling "SqlBackup" with "1" argument(s): 
"Backup failed for Server 'MyServer\MySqlInstance'. " At D:\Backups\BackupSite.ps1:151 char:22 + $backup.SqlBackup <<<< ($server) + CategoryInfo : NotSpecified: (:) [], MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException

Nehezen derült ki, hogy a hibának semmi köze a függvény meghívásának módjához, hanem a problémát az okozza, hogy megnőtt az adatbázis, és az SqlBackup függvény 10 perc után timeoutolódik. A ServerConnection objektum StatementTimeout tulajdonságával lehet kikapcsolni az időtúllépés figyelését:

$server.ConnectionContext.StatementTimeout = 0

 

Technorati-címkék: ,

5 thoughts on “Exception calling "SqlBackup" with "1" argument(s)

  1. Lajos

    És a script (cmd) kiolvassa egy textfájlból a mentendő adatbázisok nevét, ha logot nem kell menteni, akkor aztis kiolvassa a textfájlból. Pisti, a hülye rendszergazda is tudja notepad-del szerkeszteni a textfájlt. A textfájl szerkezete igen egyszerű: soronként van egy adatbázisnév, és pontosvesszővel kezdődő sor megjegyzés.

    Csak azt nem értem, hogy miért kell túlbonyolítani bonyolult, bugos szarokkal a mentést, amikor a menteni lehet egyszerűen is.

    1. Balássy György Szerző

      Azt én sem értem. Egyébként nálunk is korábban sima batch fájl végezte a mentést sqlcmd-vel, csak azután mikor került hozzá még IIS és fájlrendszer mentés is távoli szerverekre, ráadásul kb. tucatnyi paraméterrel hogy univerzális legyen a szkript, akkor a sok soros batch fájl karbantarthatatlanná vált. Ekkor álltunk át PowerShellre. A fenti csak egy igen rövid részlete a teljes szkriptnek. Mivel a hiba alacsonyabb szinten keletkezik, gyanítom, hogy sqlcmd-vel ugyanígy előjön, bár valószínű, hogy ott értelmesebb a hibaüzenet.

  2. Lajos

    A mentésnél a legkevesebb függőséget akarom, illetve a .NET-et egyáltalán nem szeretném látni a mentést végző rendszerben.

    Ha a cmd szkriptnyelve átláthatatlanná válik, akkor inkább Pythont rakok a mentés mögé, és onnantól egy pythonos szkript végzi azt, amit eddig a cmd. Tehát úgy gondolom, hogy ez esetben is a sqlcmd lenne a szkript alatt, az a sqlcmd, ami az adott SQL server mellé lett telepítve.

    A távoli szerverekre történő mentést nem értem, hogy miben bonyolítja a mentést; nálunk xcopy tolja át a “távoli szerverekre” (előtte tömörítés helyben).

    Az IIS miben bonyolította vagy akadályozta meg a cmd-s változat használatát?

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s