Minion Maintenance 1.2

April 2018

The main focus of this release is Minion Backup. We have streamlined MB, and applied several bug fixes.

We’ve started centralizing some functionality that's used everywhere, so that it’s easier to troubleshoot, patch, and fix; and to ensure all modules work the same way. This is the first big step on the way to fully realizing this centralized vision. This won’t affect users, as this centralized functionality is all internal - not something you would have been running by hand. You’ll see a higher number of installed objects, but it’s well worth it.

 
You’ll also notice that some of these internal procedures are written so you can use them in other areas of your administration. For example, the MMAGInfo function provides information about your current Availability Group scenario that you may find useful in writing your own jobs and/or procedures.
 
We’re also introducing a new naming convention in this release. So far, we’ve called every module by its name (Backup, CheckDB, IndexMaint). However, IndexMaint isn’t actually the name of the module: it's Minion Reindex. The reason it was originally called IndexMaint is that it doesn’t just perform rebuilds ("reindexes"), it also does REORGANIZE operations. But because everyone calls the modules by their abbreviations - MB, MC, MR - we’ve decided to start naming different modules in that way. In the future you’ll see objects for backup named something like Minion.MBMaster instead of Minion.BackupMaster.

This includes a new naming convention for the shared objects. Previously, anything named DBMaint* meant that it was used across all products. Since we’ve unified the products as "Minion Maintenance", we’ve started using that moniker for shared objects. From now on, any shared objects will be prefixed with ‘MM’. As an example, mentioned MMAGInfo represents the "Minion Maintenance AG Information" function. You will begin to see an increase in the number of these MM objects over the next few releases, as we continue to centralize repeatable functionality. 

New in Minion Maintenance 1.2

New Features:
  • New procedure: Minion.Version. This provides the version number of installed modules. Call it without parameters to get all modules, or pass in the name of the module (Backup, Reindex, CheckDB) to get that single module.
  • New function, MMAGInfo. This returns basic info about a database that’s in an Availability Group, so the routine can decide the proper course of action. Because this information is pulled in more than one location, it made sense to turn it into a function. Eventually all modules will use this, but for now, only MB does.
  • New function, MMCmdServerNameGet. This returns the sqlcmd string to be used for different operations. Since this is used in several locations and there are different considerations for choosing the server/port an operation will be run against, it makes sense to pull this into a function so changes are easier to propagate throughout the modules. Currently MB is the only one using this, but all modules will eventually use it as well.
  • New procedure, MMSchedulesGet. This centralizes the task of deciding which schedule row from the Minion.%SettingsServer table will be used for the current run. Previously, this functionality was in the Minion.%Master SP. MB is the only module using this right now, but it will be expanded to all modules in future. This will allow us to push scheduling fixes to all modules at once. The code is currently specialized for MB, but will be updated as other modules are brought in.

New in Minion Backup 1.5

New Features:
  • LogDetails column type changes: In the LogDetails table, the columns for pre/post LogSizeInMB and LogUsedPct were FLOAT, which left you with values like 9.58288955688477, which is just ridiculous. That level of detail simply isn’t necessary and it just bloats the log. These columns have been changed to DECIMAL(18,2) which gives you a value like 9.59 instead. 
  • Check that DB is present before attempting backup: If you’re processing a lot of databases, and one of them is deleted before it gets processed, there’s an ugly error that occurs because a DB in the queue is gone. Now, we’re checking that every DB is present right before we run it. If it’s not there, the LogDetails table is updated with the message: "Complete: Skipped- DB not present.".
  • ReportServerTempDB added to backups. We initially filtered out this DB because it's a temp DB used for SSRS, but a user pointed out that Microsoft recommends backing it up.  So we've added it back.
Issues Resolved:
  • Differential backups weren’t logging MBPerSec column for BackupLogDetails.
  • Log backups weren’t being taken if secondary node is ReadOnly or None. This was because logspace doesn’t return data for these databases. Fix is to connect to the primary, to get the log size values. Also add the -K flag for the sqlcmd statements.
  • Wrong database names showing up in LogDetails table for error certain messages. This showed up as an issue when secondary Availability Group nodes were in ReadIntent mode, and the backups failed as a result.
  • Unwarranted warnings for good backups: The previous issue also caused Warnings in databases where the backups did complete because the error variable wasn’t being cleared out.
  • "Log size" values not logged without ShrinkLogOnLogBackup =1: In the LogDetails table the columns for pre/post LogSizeInMB and LogUsedPct and ShrinkLogOnLogBackup weren’t being populated unless the ShrinkLogOnLogBackup table was set to 1. Now all values are logged regardless. This is to help you track your log sizes so you’ll be able to see the history and make better decisions.

New in CheckDB 1.2

New Features:
  • Improved logging for remote jobs that fail because the database doesn’t exist, or permissions aren't present, on the remote server. When doing a remote CheckDB, Minion CheckDB must be installed on the remote server and in the same database as it is on the primary server. The error for this was sketchy before. Now, it logs the exact issues. It could be both that the remote database doesn’t exist, or that the account running the operation doesn’t have permissions. Because this is a possibility, we now put the execution account in the error message to make it easier to check permissions.
  • All remote results gathering is now handled in the same place. Previously, there was a third job step for the remote disconnected operation. This third step pushed the CheckDB result data to the primary server. However, for a connected session, the data was pulled by the primary server. There’s no need for this, so now it’s all being pulled (instead of pushed).
  • The remote results were being missed sometimes. It's possible that the primary server was just querying the remote server too soon and the query returned nothing, or some other factor was in play. But, sometimes the status column in CheckDBLogDetails showed ‘Complete with No Status’, which is what happens when you don’t get CheckDB results back from the remote server. For whatever reason, it falsely showed no results sometimes. It’s now in a loop and, is given three chances with 5 seconds between each try. This has cut down on the false positives for this message, and in our testing on several systems, it hasn’t shown a single failure in gathering the remote data. Currently, we don’t see a need to make the loop controls configurable, but we will consider it if user demand dictates.
Issues Resolved:
  • Changed the ID column in CheckDBThreadQueue from smallint to int. We’ve seen an issue where sometimes smallint isn’t big enough.
  • CheckDB against AG snapshots wasn't handled right. On databases that are secondary nodes of an AG in read-intent or no-read mode, you need to run CheckDB against a snapshot of the database. MC didn’t handle this correctly. You still have to set it up to snapshot, but now it’ll actually perform the operation. It needs to connect to the database in order to retrieve the LastCheckDBDate column in the CheckDBLogDetails table, but if it can’t connect then it will log a warning in the Warnings column in Minion.CheckDBLogDetails. The warning will read, "WARNING: Unable to get last CheckDB data because DB is participating in an availability group and is currently not accessible for queries. CheckDB must be run against a snapshot of the current DB in order to get this info. See documentation for more information on creating snapshots in Minion CheckDB.".

New in Reindex 1.3

No changes to MR in this release.

Documentation Changes

  • Fixed: In the Minion PDF, on the bottom of page 40 it states (this is the copy / move portion): "Note: Minion Backup lets you choose what program you use to do your file copy and move operations. So, the FileActionMethod field in Minion.BackupSettings has several valid inputs: NULL (same as COPY), COPY, MOVE, XCOPY, ROBOCOPY, ESEUTIL. Note that "COPY" and "MOVE" use PowerShell COPY or MOVE commands as needed."  The table should really be Minion.BackupSettingsPath, not Minion.BackupSettings.
  • Added: In the Minion Install Guide, you should specify that $DBName needs to be an existing database.
  • Added: FrequencyMins isn’t mentioned in the SettingsServer topic.


Minion Maintenance 1.1

September 2017
 

New in Minion Reindex 1.3

New features:

  • Reindex heaps: New setting in the settings tables lets you choose whether to reindex heaps, or not.
  • Database groups:ÂMinion Reindex DB groups for include and exclude.
  • Updated internals: MR now uses the DBMaintSQLInfoGet function, like MC and MB do.
  • Scheduling: The Minion.IndexMaintSettingsServer table provides table-based scheduling, just like Minion Backup and Minion CheckDB.
  • Install: New Powershell installer!
  • Current views: Minion.IndexMaintLogCurrent and IndexMaintLogDetailsCurrent show you the most recent set of activity.

Issues resolved:

  • Fixed: Some errors were not captured in the log tables.
  • Fixed: Japanese/international characters in a table name caused errors.
  • Fixed: Performance issues.
  • Fixed: Issue with object names in brackets. If object names have square brackets in the name, it will cause a syntax error. We now surround object names in double quotes instead of brackets.
  • Fixed: Issue with running PrepOnly then RunPrepped immediately after, in the same window.
  • Fixed: Formatting issues in Minion.HELP.
  • Fixed: Updated code section comments.


New in Minion Backup 1.4

  • Added delete for SyncCmds
  • Fixed: Creating “Christmas tree folders” when using robocopy with multiple files.
  • Fixed: Missing a couple of entries in the InlineTokens table.
  • Fixed: Some sync commands being written to SyncCmds table even though SyncLogs is 0.
  • Fixed: Wasn't logging properly when a DB is in an AG.
  • Fixed: Formatting issues in Minion.HELP.
  • Fixed: Wrong restore location when restoring to a named instance and the path is being converted from a local drive. The instance name was being included in the UNC path.


New in Minion CheckDB 1.1

  • Fixed: Data explosion for remote CheckDB results pull. Remote runs were pulling all of the CheckDBResult data instead of just for the current run.
  • Fixed: ServerName not populating correctly for remote CheckDB for the Minion Enterprise import.
  • Fixed: MinionTriggerPath wasn’t set correctly for the base folder.
  • Fixed: Databases with periods or other special characters may not import into Minion Enterprise for central reporting. Changed delimiter for the import process to accommodate this better.
 

Minion Maintenance 1.0

February 2017

New features in brief: 

  • Unified installer for Minion Backup and Minion CheckDB.
  • Minion Backup 1.3
  • Minion CheckDB 1.0

Minion Backup 1.2

September 2016

New features in brief: 

  • Minion Backup allows you to define groups of databases (to include or exclude in backups).
  • The new @TestDateTime parameter lets you see which schedule will be used at any given time.
  • The FrequencyMins column adds more flexibility to your scheduling scenarios.
  • You can now set the backup job to fail or errors and/or warnings, if you like, using either the FailJobOnError and FailJobOnWarning columns, or similarly named parameters.
 

Minion Reindex 1.2

October 2015

New features:

  • Error trapping and logging is improved. Minion Reindex is able to capture many more error situations now, and they all appear in the log table (Minion.IndexMaintLog).
  • Statement Prefix – All of the Settings tables (Minion.IndexSettingsDB, Minion.IndexSettingsTable) now have a StmtPrefixcolumn. See the documentation on www.MinionWare.net/Reindex/ for details. Note: To ensure that your statements run properly, you must end the code in this column with a semicolon.
  • Statement Suffix – All of the Settings tables (Minion.IndexSettingsDB, Minion.IndexSettingsTable) now have a StmtSuffixcolumn.  See the documentation on www.MinionWare.net/Reindex/ for details. Note: To ensure that your statements run properly, you must end the code in this column with a semicolon.

Issues resolved:

  • Fix: Minion Reindex failed when running on BIN collation.
  • Fix: Help didn’t install if Minion Backup was installed.
  • Fix: Minion Reindex didn’t handle XML and reorganize properly.
  • Fix: ONLINE/OFFLINE modes were not being handled properly.
  • Fix: XML indexes were put into ONLINE mode instead of OFFLINE mode.
  • Fix: Situation where indexes could be processed more than once.
  • Update: Increased Status column in log tables to varchar(max).
  • Fix: Status variable in stored procedures had different sizes.
  • Fix: Wrong syntax created for Wait_at_low_priority option.
  • Fix: Reports that offline indexes were failing when it’s set to online instead of doing it offline.

 


Minion Backup 1.1

October 2015

New feature: You can now take NUL backups, so you can kick start your backup tuning scenario.  For more information, see the section titled “About: Backing up to NUL”in the official product documentation on www.MinionWare.net/Backup/

 Issues resolved:

  • Fixed mixed collation issues.
  • Fixed issue where Verify was being called regardless of whether there were files that needed verifying.
  • Data Waiter port wasn’t being configured correctly so there were circumstances where the data wasn’t being shipped to the other servers.
  • Greatly enhanced Data Waiter performance. Originally, if a server were down, the rows would be errored out and saved to try for the next execution.  Each row would have to timeout.  If the server stayed offline for an extended period you could accumulate a lot of error rows waiting to be pushed and since they all timed out, the job time began to increase exponentially.  Now, the server connection is tried once, and if the server is still down then all of the rows are instantly errored out.  Therefore, there is only one timeout incurred for each server that’s down, instead of one timeout for each row.  This greatly stabilizes your job times when you have sync servers that are offline.
  • Fixed an issue where the ‘Missing’ parameter wasn’t being handled properly in some circumstances.
  • Fixed issue where Master was discarding differential backups in simple mode.
  • Fixed issue where Master wasn’t displaying DBs in proper order. They were being run in the proper order, but the query that shows what ran wasn’t sorting.
  • Master SP wasn’t handling Daily schedules properly.
  • Reduce DNS lookups by using ‘.’ when connecting to the local box instead of the machine name which causes a DNS lookup and could overload a DNS server.
  • SQL Server 2008 R2 SP1 service consideration. The DMV sys.dm_server_services didn’t show up until R2 SP1.  The Master SP only checked for 10.5 when querying this DMV.  If a server is 10.5 under SP1, then this fails because the DMV isn’t there.  Now we check the full version number so this shouldn’t happen again.
  • Master SP not logging error when a schedule can’t be chosen.
  • Situation where differentials will be errored out if they don’t have a base backup. Now they’ll just be removed from the list.
  • HeaderOnly data not getting populated on 2014 CU1 and above. MS added 3 columns to the result set so we had to update for this.
  • Increased shrinkLog variable sizes to accommodate a large number of files.
  • Fixed international language issue with decimals.
  • Push to Minion error handling improved. There were some errors being generated that ended SP execution, but those errors weren’t being pushed to the Minion repository.
 

Minion Backup 1.0

June 2015

Top 20 Features

As long as we’re here, we might as well post a few of our favorite things. Like:

  1. Live Insight – See what Minion Backup is doing every step of the way. You can even see the percent complete for each backup as it runs.
  2. Dynamic Backup Tuning – Configure thresholds and backup tuning settings. Minion Backup will adjust the tuning settings based on your thresholds! Tuning settings can be configured even down to the time of day for maximum control of your resources.
  3. Stripe, mirror, copy, and/or move backup files – Minion Backup provides extensive file action functionality, all without additional jobs. You even get to choose which utility performs the operations.
  4. Flexible backup file delete and archive – Each database and backup type can have an individual backup file retention setting. And, you can mark certain backup files as “Archived”, thus preventing Minion Backup from deleting them.
  5. Shrink log file on backup – Specify the size threshold for shrinking your log file. Minion Backup logs the before and after log sizes.
  6. Backup certificates – Back up your server and database certificates with secure, encrypted passwords.
  7. Backup ordering – Back up databases in exactly the order you need.
  8. Extensive, useful logging – Use the Minion Backup log for estimating the end of the current backup run, troubleshooting, planning, and reporting. And errors get reported in the log table instead of in text files.  There’s almost nothing MB doesn’t log.
  9. Run “missing” backups only – Did some of your database backups fail last night? The “missing” keyword allows you to rerun a backup operation, catching those backups that failed in the last run (for that database type and backup type).  You can even tell MB to check for missing backup automatically.
  10. HA/DR Aware – Our new Data Waiter feature synchronizes backup settings, backup logs, or both among Availability Group nodes; mirroring partners; log ship targets; or any other SQL Server instance. There are other features that enhance your HA/DR scenarios as well.
  11. Flexible include and exclude – Backup only the databases you want, using specific database names, LIKE expressions, and even regular expressions.
  12. Run code before or after backups – This is an extraordinarily flexible feature that allows for nearly infinite configurability.
  13. Integrated help – Get help on any Minion Backup object without leaving Management Studio. And, use the new CloneSettings procedure to generate template insert statements for any table, based on an example row in the table.
  14. Built-in Verify – If you choose to verify your backups, set the verify command to run after each backup, or after the entire set of backups.
  15. Single-job operation – You no longer need multiple jobs to run your backups. MB allows you to configure fairly complex scenarios and manage only a single job.
  16. Encrypt backups – In SQL Server 2014 and beyond, you can choose to encrypt your backups.
  17. Compatible with Availability Groups – Minion Backup takes full backup of Availability Group scenarios. You can not only use the preferred AG replica for your backups, but you can also specify specific replicas for each backup type.
  18. Scenario testing— Dynamic tuning, file delete, and file paths all have facilities for testing your configuration before you rely on it.
  19. Automated operation – Run the Minion Backup installation scripts, and it just goes. You can even rollout to hundreds of servers almost as easily as you can to a single server.
  20. Granular configuration without extra jobs – Configure extensive settings at the default, and/or database levels with ease. Say good-bye to managing multiple jobs for specialized scenarios.  Most of the time you’ll run MB with a single job.
 

Minion Reindex 1.1

January 2015

New features:
  • Made sure Minion Reindex handles all nonstandard naming (e.g., object names with spaces or special characters).
  • Added support for Availability Group replicas. (Basic AG support has been added by only permitting Minion Reindex to run on an AG Primary DB.)
  • Fixed formatting in Minion.Help stored procedure.
  • If you run the installation script in a database other than master, this will now automatically be reflected in the Minion Reindex jobs. (The documents still say that you have to change this manually…I need to update that…)
 

Minion Reindex 1.0

October 2014