Returning partial data in SQL Server Express standby?

I am trying to help our network engineers fix a situation for one of our clients. This customer purchased a sales system from a literal mom-and-pop manufacturer and said the vendor recommends SQL Server Express 2005 as a baseline database to save the customer from charging additional licensing fees. (Please don't make me start with ! )

We did not write the application, and since this is a commercial application, we have no source code. (Not that it would help us, if we did, it was built in PowerBuilder, so we don't have the tools to do that.) The app doesn't make any of its own protocols that we can install. All we need is SQL Server Express native logging.

In the app, the end user views the membership card. Sometimes (several times a day) the swipe does not return data from the database. The message on the screen will say "Member 123 not found." (Member numbers are actually six digits, "000123."). Rescanning immediately afterwards returns the item data correctly.

We ruled out the scanner itself as a source of problems - it regularly scans the full six-digit number. A scan of the SQL Server Express log indicates that it comes back from the network without downtime, often to the point of scan (but also multiple times a day). (Standby mode - explained here .)

I understand that allocating / freeing RAM, as SQL Express does, is a time consuming process, especially when we are talking about hundreds of megabytes at a time, which seems to be the case.

The fact that we are not sure if we are getting partial data or not, we simply cannot connect to the database and display a generic error message. Since everything is so opaque and the client (understandably) doesn't want to pay us to sit at their facility for 8 hours or so to physically see it happening (perhaps with network monitoring / packet nulling tools) , we're kind of at a loss.

At this point, our recommendation is that the client upgrade to SQL Server 2005 Workgroup Edition with 5 CALs. But that doesn't fully fit me as a solution to this problem, because I'm pretty sure SQL Server never returns partial data - if you can't connect, you can't connect. (However, I still recommend it because it is the solution to many other problems!)

I don't have much experience with Express. (I never use it for anything other than local development, and only at home; I certainly never recommend it to my clients.)

My question for those who may have experience with Express, have you ever seen an instance of SQL Express returning partial data, without the application itself causing it? In particular, have you seen this behavior when returning from standby?

(For what it's worth, we tend to believe that the app is not connecting and just displays a generic error message, stripping away leading zeros in the member ID when it does. That seems like the most reasonable answer - maybe a third question, would you agree with this assessment ?)

0


source to share


1 answer


I have never heard or experienced SQL Server Express returning partial data. This is essentially the same codebase as full SQL Server.

It is more likely that the application is experiencing a timeout (which is 30 seconds by default) because SQL Server Express is not running. The app is probably getting a timeout that it is not expecting and is not handling it.

The problem and possible solutions are discussed in this forum: http://social.msdn.microsoft.com/forums/en-US/sqlexpress/thread/a8fbf8d6-9949-47a5-a32b-50f8131f1127/

I suspect you have a connection string that looks like this:



Data Source=.\SQLEXPRESS; Integrated Security=True;AttachDbFilename=|DataDirectory|\myDatabase.mdf;User Instance=True

      

From the referenced link:

This connection string will cause an initial connection to the primary instance (. \ SQLEXPRESS), and then instruct the primary instance to place the new SQL Server instance under the user context and bind the database specified for the new user instance. The user instance is a completely separate executable SQL Server instance, which is the main instance that is unique to the user, and this will shut down when there is no longer a connection to it.

It is completely different that binding the database to the main instance, which remains running at all once, unless you manually shut it down. If your question is about the main instance being in Idle state, then your question is not unique to SQL Express and you should ask this question in the Engine Forum database. I believe all editions of SQL Server have a pending state and another forum will be there where you can learn how to influence this behavior.

+1


source







All Articles