Monday, March 4, 2013

SQL Anywhere 16 Sneak Peek: Abort, Retry, Escalate

Today marks the second anniversary of a promise reported in this request for "Assertion Relief":

"...we plan to make changes to allow corrupted databases to be stopped without bringing down the server. Printing database information to related assertion failures should be part of that."

Ta Daaaa!

Relief is here, now, with SQL Anywhere 16's new dbsrv16 -ufd abort, restart, escalate option that specifies "the action that the database server takes when a fatal error or assertion failure occurs on a database."

Well, it's ALMOST here, and will be as soon as SAP sets SQL Anywhere 16 loose.

The dbsrv16 -ufd option applies to database fatal errors and assertions, not server errors... if you get an error related to the server itself, then presumably the server still stops, just like it does now no matter which kind of fatal error you get.

Caveat Emptor: The word "presumably" is shorthand for "I have not seen dbsrv16 -ufd in operation yet"... eventually, I will... I get more than enough assertion errors without having to make one happen on purpose.

But, for now, this article is really just me reading the Help to you :)

Here are the choices:
  • dbsrv16 -ufd abort "The affected database is shut down. The statuses of the database server and other databases remain unchanged."

    This is the new default, which is different from the current behavior in Version 12 (see "escalate" below). This setting makes sense if you're really not expecting assertions, and you want to kick the users offline until you fix the database.

  • dbsrv16 -ufd restart "The affected database is shut down with an attempt to restart the database. If the restart attempt fails, a database server assertion failure is raised."

    This setting makes sense for lights-out operations at both ends of the spectrum: A single assertion in one database among hundreds on a SQL Anywhere server doesn't cause them all to halt, and an embedded database application may be designed so the user can seamlessly reconnect and carry on past a transient database assertion. The latter is what Foxhound's going to do in its next release... and, I think, it's going to be a popular choice for a lot of people.

  • dbsrv16 -ufd escalate "The database assertion failure or fatal error is treated as a database server assertion failure or fatal error."

    That is the Old Way Of Doing Things... when a light burns out in the lavatory on the flight from LA to Seoul, the whole fleet of aircraft shuts down and crashes.
The fact that concerns about backward compatiblity didn't result in escalate being the new default is further proof of the saying "Watcom does things the way they should be done!"

No comments: