onze sponsors
Beste allemaal,
Ik heb me zojuist geregistreerd, want ik heb hulp nodig bij iets waar ik niet uit kom. Ik hoop maar dat ik iets over het hoofd zie waar jullie me mee kunnen helpen. Hier komt de situatie:
Twee SQL servers, beide hebben een verschillende database en functie.
Op SQL niveau heb ik meerdere maintenanceplannen gedefinieerd.
Ik zie nu dat sommige plannen niet volledig worden uitgevoerd.
in de designer ziet het plan er als volgt uit.
Dan kijk ik in de Job agent, en zie daar maar één van alle stappen terug.
Vervolgens start ik de job handmatig of automatisch en zie ik dat hij wel erg snel klaar is. 6 Seconden om een flinke database te backuppen is wel erg weinig.
Mijn vragen:
Hoi, en bedankt voor het meedenken en meekijken. Ik heb even gekeken in de log. Ik zie de transactielogbackups die als subplan in hetzelfde maintenanceplan draaien wél starten en voltooien.
Ik zie de transactielogs netjes voltooien steeds op het hele uur t/m 11 uur. Dan om twee uur 's nachts moet de full backup gaan lopen, de job hierboven op het eerste plaatje.
Ik zal eens kijken naar de schedule instellingen. Daar is in alle tijd (het heeft namelijk wel gewerkt) nooit iets aan verandert.
Ik kan hier niet echtgehakt van maken. Met andere woorden: zie ik de noodzaak niet om hier iets aan te moeten aanpassen. Dat kan ik verkeerd hebben natuurlijk
Klopt, ik zie dat het ineens opgehouden is. De full backup heeft inderdaad prima gelopen. Ik heb wel de maintenance cleanup taak vóór de backup taak gezet, terwijl die er eerst achter stond. Sindsdien heeft het eigenlijk niet meer gewerkt. Ik zal de log van afgelopen nacht even opgraven.
Dit staat er in de logfile (lang leve copy-paste!)
De eerste transactielog backup van 6:00 uur levert dit op:
Microsoft(R) Server Maintenance Utility (Unicode) Version 10.0.1600 Report was generated on "HILVSDBS02". Maintenance Plan: Backup en onderhoud Quintiq Duration: 00:00:19 Status: Succeeded. Details: Back Up Database Task (HILVSDBS02) Task start: 2011-04-13T06:00:29. Task end: 2011-04-13T06:00:44. Success
En die levert ook keurig een TRN bestandje.
Volgens mij moet je meer kunnen loggen. Dat is een optie in het Reporting and Logging window. De optie staat ergens onderin. Zet die eens aan. Zoals ik de logfile lees die je nu geplakt hebt is de job gelukt. Waarom denk je dat het fout gaat? Dit is mijn logfile, die bevat iets meer specifieke informatie.
Microsoft(R) Server Maintenance Utility (Unicode) Version 10.50.1600 Report was generated on "SOMESERVER". Maintenance Plan: MaintenancePlan Duration: 00:00:03 Status: Succeeded. Details: Maintenance Cleanup Task (SOMESERVER) Maintenance Cleanup on Local server connection Cleanup Database Backup files Age: Older than 4 Weeks Task start: 2011-04-13T12:15:16. Task end: 2011-04-13T12:15:16. Success Command:EXECUTE master.dbo.xp_delete_file 0,N''c:\projects'',N''bak'',N''2011-03-16T12:15:16''
GO
Back Up Database (Full) (SOMESERVER) Backup Database on Local server connection Databases: PartitionDemo Type: Full Append existing Task start: 2011-04-13T12:15:18. Task end: 2011-04-13T12:15:19. Success Command:BACKUP DATABASE [PartitionDemo] TO DISK = N''C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\PartitionDemo_backup_2011_04_13_121518_5125165.bak'' WITH RETAINDAYS = 7, NOFORMAT, NOINIT, NAME = N''PartitionDemo_backup_2011_04_13_121518_5055161'', SKIP, REWIND, NOUNLOAD, STATS = 10
Goed, Nu even de job laten lopen met extended logging.
Bij poging 1 kreeg ik dit resultaat:
Microsoft(R) Server Maintenance Utility (Unicode) Version 10.0.1600 Report was generated on "HILVSDBS02". Maintenance Plan: Backup en onderhoud Quintiq Duration: 00:00:00 Status: Succeeded. Details: Maintenance Cleanup Task (HILVSDBS02) Maintenance Cleanup on Local server connection Cleanup Database Backup files Age: Older than 7 Days Task start: 2011-04-13T13:58:35. Task end: 2011-04-13T13:58:35. Success Command:EXECUTE master.dbo.xp_delete_file 0,N''P:\SQLBACKUP'',N''bak; trn; BAK; TRN'',N''2011-04-06T13:58:35'',1
Nu viel mij op dat ik meerdere extensies niet zo kan aangeven, want T-SQL commando ziet mijn string als een lange extensie (zie het rood gemarkeerde gedeelte). Die heb ik aangepast zodat ik het volgende zag na een nieuwe run:
Microsoft(R) Server Maintenance Utility (Unicode) Version 10.0.1600 Report was generated on "HILVSDBS02". Maintenance Plan: Backup en onderhoud Quintiq Duration: 00:00:00 Status: Succeeded. Details: Maintenance Cleanup Task (HILVSDBS02) Maintenance Cleanup on Local server connection Cleanup Database Backup files Age: Older than 7 Days Task start: 2011-04-13T13:59:56. Task end: 2011-04-13T13:59:57. Success Command:EXECUTE master.dbo.xp_delete_file 0,N''P:\SQLBACKUP'',N''bak'',N''2011-04-06T13:59:56'',1
Dat gaat al een stuk beter. De .BAK bestanden worden t/m 6 april 13:59 netjes weggehaald. Ik wil eigenlijk ok in die slag alle .TRN bestanden weghaalt. Kan ik dan beter een extra maintenance cleanup erbij maken? Eenmaal per dag is voor mij voorlopig voldoende. Een nieuw .BAK bestand is er niet gemaakt, dus de tweede stap heeft niet gelopen, om maar niet te spreken dat er ergens een notification uit is gerold. Komt dat door de precedence constraint tussen de jobs?
Ok. Het is inderdaad de precedence constraint. Ik stel voor dat je de eerste veranderd in OnCompleted ipv OnSucces en dan die bij Notify operator verwijderd. Dit heeft effectief hetzelfde resultaat als jij probeert te bereiken. Ik heb een vermoeden dat je backup nu niet loopt omdat SQL geen mailtje de deur uit krijgt. Dat wil je niet lijkt mij.
Robert,
Daar zit wat in. Een taak kan niet aan de ene kant mislukken en aan de andere kant slagen. Dat gaat niet. Ik heb de job nu aangepast, maar ik wil wet worden gemaild als de job een deel niet heeft kunnen uitvoeren.
Voor nu ziet het er zo uit:
Zoals je ziet is de eerste notification (voor een error) nergens mee verbonden Nadat de maintenance cleanup gedraaid heeft is er één constraint die on completion doorgaat, geslaagd of niet. Is het niet zo dat de constraints er uit moeten zien zoals na de full backup? Dat wil zeggen: Of mislukt, of geslaagd. Aaan de hand daarvan wordt een "Alles OK" mail of een "Backup niet geslaagd" mail gestuurd. Als je de Precedence Constraint editor bekijkt, zie je onder bij "Multiple constraints" dat je 'm op "Logical OR" kunt zetten. dat heb ik met die onderste twee gedaan. Eens kijken hoe dat uitpakt.
En als ik nu in de logbestanden kijk:
Microsoft(R) Server Maintenance Utility (Unicode) Version 10.0.1600 Report was generated on "SERVER02". Maintenance Plan: Backup en onderhoud Tweede_server Duration: 00:00:20 Status: Succeeded. Details: Maintenance Cleanup Task (SERVER02) Maintenance Cleanup on Local server connection Cleanup Database Backup files Age: Older than 7 Days Task start: 2011-04-13T16:27:06. Task end: 2011-04-13T16:27:06. Success Command:EXECUTE master.dbo.xp_delete_file 0,N''P:\SQLBACKUP'',N''bak'',N''2011-04-06T16:27:06'',1
Backup Database (SERVER02) Backup Database on Local server connection Databases: ########Internal,########Internal40 Type: Full Append existing Task start: 2011-04-13T16:27:07. Task end: 2011-04-13T16:27:24. Success Command:EXECUTE master.dbo.xp_create_subdir N''P:\SQLBACKUP\########Internal'' GO EXECUTE master.dbo.xp_create_subdir N''P:\SQLBACKUP\########Internal40''
GO BACKUP DATABASE [########Internal] TO DISK = N''P:\SQLBACKUP\########Internal\########Internal_backup_2011_04_13_162707_3548108.bak'' WITH RETAINDAYS = 7, NOFORMAT, NOINIT, NAME = N''########Internal_backup_2011_04_13_162707_3509044'', SKIP, REWIND, NOUNLOAD, STATS = 10 GO declare @backupSetId as int select @backupSetId = position from msdb..backupset where database_name=N''########Internal'' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N''########Internal'' ) if @backupSetId is null begin raiserror(N''Verify failed. Backup information for database ''''########Internal'''' not found.'', 16, 1) end RESTORE VERIFYONLY FROM DISK = N''P:\SQLBACKUP\########Internal\########Internal_backup_2011_04_13_162707_3548108.bak'' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
GO BACKUP DATABASE [########Internal40] TO DISK = N''P:\SQLBACKUP\########Internal40\########Internal40_backup_2011_04_13_162707_3850854.bak'' WITH RETAINDAYS = 7, NOFORMAT, NOINIT, NAME = N''########Internal40_backup_2011_04_13_162707_3850854'', SKIP, REWIND, NOUNLOAD, STATS = 10 GO declare @backupSetId as int select @backupSetId = position from msdb..backupset where database_name=N''########Internal40'' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N''########Internal40'' ) if @backupSetId is null begin raiserror(N''Verify failed. Backup information for database ''''########Internal40'''' not found.'', 16, 1) end RESTORE VERIFYONLY FROM DISK = N''P:\SQLBACKUP\########Internal40\########Internal40_backup_2011_04_13_162707_3850854.bak'' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
Notification - succesful (SERVER02) Notify Operator on Local server connection Operator: Eddie Scholten Task start: 2011-04-13T16:27:24. Task end: 2011-04-13T16:27:26. Success Command:EXECUTE msdb.dbo.sp_notify_operator @name=N''Eddie Scholten'',@subject=N''Alle databasetaken succesvol verlopen'',@body=N''De backup en maintenance cleanup op de Tweede_server databases zijn succesvol afgerond. [Backup en onderhoud Tweede_server\Backup database\Maintenance cleanup -> Backup database task]''
Ziet er een stuk beter uit.
Eddie,
je kan de OnError nog steeds koppelen aan de Notification bij de eerste. Als de tweede maar OnCompletion is wanneer je wilt dat hij altijd naar de volgende stap gaat. Dus het enige lijntje dat je weg hoeft te halen tov je eerste afbeelding is de groene lijn tussen Notification en Backup Database. Vervolgens verander je de lijn tussen Maintenance Task en Backup Database in OnCompleted (blauw). Dan gaat het goed. De onderste was al goed en hoeft niet veranderd te worden.
Hoi Robert,
Ik twijfel een beetje of dat werkt.
Ik ga daar morgen of overmorgen wel eens mee spelen op een testdatabase.
Is het niet zo dat in dit geval failure én completion moeten gelden om door te gaan naar de volgende stap? Moet je niet de OnError in een OR voorwaarde gebruiken? Dat hij dus OnCompletion OR OnError doorgaat naar de volgende stap. Dat betekent dat je lijntje naar de Notify error een stippellijn wordt zodat die voorwaarde niet samen met on complete hoeft te gelden. Dat je slechts een notify wilt als een taak mislukt is helder en logisch. Is de taak gelukt, dan gaat-ie gewoon verder. Wat ik nu doe is: de taak mislukt, de server stuurt een bericht en gaat proberen de volgende taak uit te voeren.
Overigens moet ik nog wel een Maintenance cleanup taak erbij maken die TRN bestanden opruimt, ik zie niet hoe ik die extensies kan combineren in een taak. Daar ging het in het begin mis op.
Fijn overigens dat je met me meedenkt. Ik ben nog een newbie op het gebied van SQL server, dus je hulp wordt gewaardeerd!
Klopt. Ik heb de geconstateerde fouten vanmiddag nog op beide servers weggehaald. Vannacht draaien de jobs. Ik zal morgen als eerste even kijken hoe ze gelopen hebben. Ik zal inderdaad die OnCompletion erbij zetten ipv OnSuccess. Dan maakt AND of OR inderdaad niets meer uit.
Morgen update!
Gelukt! Hierbij de log als bewijs:
Microsoft(R) Server Maintenance Utility (Unicode) Version 10.0.1600 Report was generated on "#######". Maintenance Plan: Backup en onderhoud Duration: 00:08:44 Status: Succeeded. Details: Maintenance Cleanup Task TRN (#######) Maintenance Cleanup on Local server connection Cleanup Database Backup files Age: Older than 7 Days Task start: 2011-04-14T02:00:02. Task end: 2011-04-14T02:00:11. Success Command:EXECUTE master.dbo.xp_delete_file 0,N''P:\SQLBACKUP'',N''TRN'',N''2011-04-07T02:00:02'',1
Maintenance Cleanup Task BAK (#######) Maintenance Cleanup on Local server connection Cleanup Database Backup files Age: Older than 7 Days Task start: 2011-04-14T02:00:11. Task end: 2011-04-14T02:00:13. Success Command:EXECUTE master.dbo.xp_delete_file 0,N''P:\SQLBACKUP'',N''BAK'',N''2011-04-07T02:00:11'',1
Back Up Database Task (#######) Backup Database on Local server connection Databases: SOMEDATABASE3Apr Type: Full Append existing Task start: 2011-04-14T02:00:14. Task end: 2011-04-14T02:08:46. Success Command:EXECUTE master.dbo.xp_create_subdir N''P:\SQLBACKUP\SOMEDATABASE3Apr''
GO BACKUP DATABASE [SOMEDATABASE3Apr] TO DISK = N''P:\SQLBACKUP\SOMEDATABASE3Apr\SOMEDATABASE3Apr_backup_2011_04_14_020014_0216617.bak'' WITH RETAINDAYS = 7, NOFORMAT, NOINIT, NAME = N''SOMEDATABASE3Apr_backup_2011_04_14_020014_0206852'', SKIP, REWIND, NOUNLOAD, STATS = 10 GO declare @backupSetId as int select @backupSetId = position from msdb..backupset where database_name=N''SOMEDATABASE3Apr'' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N''SOMEDATABASE3Apr'' ) if @backupSetId is null begin raiserror(N''Verify failed. Backup information for database ''''SOMEDATABASE3Apr'''' not found.'', 16, 1) end RESTORE VERIFYONLY FROM DISK = N''P:\SQLBACKUP\SOMEDATABASE3Apr\SOMEDATABASE3Apr_backup_2011_04_14_020014_0216617.bak'' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND
Notification - succesful (#######) Notify Operator on Local server connection Operator: Eddie Scholten Task start: 2011-04-14T02:08:46. Task end: 2011-04-14T02:08:46. Success Command:EXECUTE msdb.dbo.sp_notify_operator @name=N''Eddie Scholten'',@subject=N''Alle databasetaken succesvol verlopen'',@body=N''De backup en maintenance cleanup op de SOMEDATABASE databases zijn succesvol afgerond.
[Backup en onderhoud\Backup database\Maintenance cleanup task -> Database backup task]''
De extended logging heeft z'n nut bewezen. Die kan ik nu wel uitzetten
Ik merkte gisterochtend dat ik de transactielogbackups nog niet verwijderde op één van de twee servers. Het plan bevatte nog niet de taak om die op te ruimen. Geen nood, ik heb het er even bij gezet in de vorm van een extra taak.
Wat blijkt: het hele subplan komt niet verder dan de eerste stap, na het succesvol doen van de eerste stap.
Microsoft(R) Server Maintenance Utility (Unicode) Version 10.0.1600 Report was generated on "#########". Maintenance Plan: Backup en onderhoud ******* Duration: 00:00:20 Status: Succeeded. Details: Maintenance Cleanup Task TRN (#######) Task start: 2011-04-15T02:00:01. Task end: 2011-04-15T02:00:22. Success
En dat was het hele plan. Mijn gok is dat de voorwaarde AND een voorwaarde OR moet worden en dat ga ik maar eens even testen.