web-dev-qa-db-fra.com

Rétrécissement des fichiers journaux avec SMO

Je sais que je peux utiliser le T-SQL suivant pour réduire un fichier journal:

BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn';
DBCC ShrinkFile([db1_log], 0);

Comment puis-je faire la même chose avec SMO? J'ai essayé:

$server = new-Object Microsoft.SqlServer.Management.Smo.Server()

$dbBackup = new-object Microsoft.SqlServer.Management.Smo.Backup
$dbBackup.Action = "Log"
$dbBackup.Database = "db1"
$dbBackup.Devices.AddDevice("\\server\share\db1_log1.trn", "File")
$dbBackup.SqlBackup($server)

$db = $srv.Databases.Item("db1")
$db.TruncateLog()

Mais ICI , j'ai trouvé que la méthode TRUCATELOG () ne fonctionne pas avec rien de plus haut que SQL 2005. Ce lien a recommandé d'utiliser:

$db.RecoveryModel = RecoveryModel.Simple
$db.Alter()
$db.LogFiles[0].Shrink(0, ShrinkMethod.TruncateOnly)

Cependant, la commutation en mode de récupération simple va briser ma chaîne de journalisation et je ne veux pas faire cela. Réduire le fichier journal ne casse pas ma chaîne de journal, donc je recherche une méthode SMO équivalente pour le faire. Une telle méthode existe-t-elle?

2
Elijah W. Gagne

Lisez-le ici Avant de réduire votre fichier journal.

Vous n'avez pas à changer le modèle de récupération ...

Mise à jour:

vous pouvez utiliser une cmdlet Invoke-SQLCMD.

par exemple.

$query = "DBCC SHRINKFILE(db1_log)"
Invoke-Sqlcmd -ServerInstance $instanceName -Query $query

Edit: ci-dessous est un extrait de PowerShell V3 Cookbook ...

Toutes les commandes DBCC ne sont pas enveloppées dans des méthodes SMO. Pour les autres commandes DBCC qui ne sont pas bien emballées dans des méthodes, vous pouvez toujours les exécuter à l'aide de la cmdlet Invoke-SQLCMD.

4
Kin Shah