I’m not a big fan of the built-in Maintenance Plan functionality in SQL Server. I like the interface in SQL 2005 better than 2000 (it looks more like building an SSIS package) but it’s still a bit of a black box. You don’t really know what commands are being run based on the selections you have made, and you can easily make some unwise choices without realizing it, such as shrinking your database on a regular basis. I really prefer to know exactly what commands and with which options are being run on my servers.
Recently I had another very strange thing happen with a Maintenance Plan, this time in SQL 2005, SP3. I inherited this server and have done a bit of cleanup on it, but had not yet gotten around to replacing the Maintenance Plans with all my own scripts. However, one of the maintenance plans which was just responsible for doing LOG backups was running more frequently than that system needed, and I thought I would just tweak the schedule a bit. So I opened the Maintenance Plan and edited the properties of the Subplan, setting a new schedule, saved it and figured all was good to go. But the next execution of the Scheduled Job that triggers the Maintenance Plan code failed with an error about the Owner of the job. Specifically the error was, “Unable to determine if the owner (OldDomain\OldDBAUserID) of job MaintenancePlanName.Subplan has server access (reason: Could not obtain information about Windows NT group/user 'OldDomain\OldDBAUserID’..” I was really confused because I had previously updated all of the jobs to have current accounts as the owners. At first I thought it was just a fluke, but it happened on the next scheduled cycle so I investigated further and sure enough, that job had the old DBA’s account listed as the owner. I fixed it and the job successfully ran to completion.
Now, I don’t really like mysteries like that, so I did some more testing and verified that, sure enough, just editing the Subplan schedule and saving the Maintenance Job caused the Scheduled Job to be recreated with the old credentials. I don’t know where it is getting those credentials, but I can only assume that it is the same as the original creator of the Maintenance Plan, and for some reason it insists on using that ID for the job owner. I looked through the options in SSMA and could not find anything would let me easily set the value that I wanted it to use. I suspect that if I did something like executing sp_changeobjectowner against the Maintenance Plan that it would use that new ID instead. I’m sure that there is good reason that it works this way, but rather than mess around with it much more, I’m just going to spend my time rolling out my replacement scripts instead.
Chalk this little hidden oddity up as yet one more reason I’m not a fan of Maintenance Plans.