Eu sei que posso usar o seguinte t-SQL para reduzir um arquivo de log:
BACKUP LOG db1 TO DISK = '\\server\share\db1_log1.trn';
DBCC ShrinkFile([db1_log], 0);
Como faço o mesmo com o SMO? Eu tentei:
$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()
Mas aqui , descobri que o método TruncateLog() não funciona com nada superior ao SQL 2005. Esse link recomendado usar:
$db.RecoveryModel = RecoveryModel.Simple
$db.Alter()
$db.LogFiles[0].Shrink(0, ShrinkMethod.TruncateOnly)
No entanto, mudar para o modo de recuperação simples interromperá minha cadeia de logs e não quero fazer isso. Encolher o arquivo de log não quebra minha cadeia de log, então estou procurando um método SMO equivalente para fazer isso. Esse método existe?
Leia aqui antes de reduzir seu arquivo de log.
Você não precisa mudar o modelo de recuperação ...
Atualizar:
você pode usar o cmdlet Invoke-sqlcmd.
por exemplo.
EDIT: Abaixo está um trecho do livro de receitas do Powershell V3 ...
Nem todos os comandos DBCC são agrupados em métodos SMO. Para outros comandos DBCC que não estão bem agrupados em métodos, você ainda pode executá-los usando o cmdlet Invoke-Sqlcmd.
@elijah,
O SMO tem a função de encolher o arquivo. O script do PowerShell abaixo mostra que o método log.shrink é usado para reduzir APENAS o arquivo de log. A opção encolher com padrão ou somente truncar funciona para mim com o modelo de recuperação total.
O script mostra que o arquivo de log foi inicialmente definido em 1 MB, altere o tamanho para 10 MB e reduza-o novamente para 1 MB. O tamanho do arquivo de dados permanece em seu tamanho inicial, 5 MB.