Showing posts with label checks. Show all posts
Showing posts with label checks. Show all posts

Wednesday, March 28, 2012

Question regarding stored procs

Hello,

It might be a basic question, but there it goes:

I have a store procedure that first checks if the record exists and, if
it doesn't, inserts the new record.

Is the scenario below possible?

(thread1) USER1 -> check if record "abc" exists
(thread2) USER2 -> check if record "abc" exists
(thread1) USER1 -> "abc" doesn't exist
(thread2) USER2 -> "abc" doesn't exist
(thread1) USER1 -> add "abc" as new record
(thread2) USER2 -> add "abc as new record (OPS, this is an error,
because "abc" already exists, it was just inserted by USER1)

I am wondering if this kind of concurrent, multi-threaded access
happens with stored procedures.

If yes, can I execute a procedure from start to finish without any
other simultaneous procedure interrupting?

I appreciate any information about this.

Leonardo.Hi Leonardo,

The answer to your first question is yes; if you do not establish a
transaction (with the appropriate locking mechanism), then you can have
concurrency issues. However, you can establish a transaction and set
the isolation level to a higher restriction to avoid this scenario.

Check the SQL Server Books OnLine for transactions and transaction
isolation levels; that should get you started.

HTH,
Stu|||(leodippolito@.gmail.com) writes:
> It might be a basic question, but there it goes:
> I have a store procedure that first checks if the record exists and, if
> it doesn't, inserts the new record.
> Is the scenario below possible?
> (thread1) USER1 -> check if record "abc" exists
> (thread2) USER2 -> check if record "abc" exists
> (thread1) USER1 -> "abc" doesn't exist
> (thread2) USER2 -> "abc" doesn't exist
> (thread1) USER1 -> add "abc" as new record
> (thread2) USER2 -> add "abc as new record (OPS, this is an error,
> because "abc" already exists, it was just inserted by USER1)

Yes.

> I am wondering if this kind of concurrent, multi-threaded access
> happens with stored procedures.
> If yes, can I execute a procedure from start to finish without any
> other simultaneous procedure interrupting?

You would need to enclose the IF EXISTS + SELECT in a transaction.
Furthermore, you must make sure that the isolation level is serializable.
The defuault isolation level in SQL Server is READ COMMITTED, which
means that once the EXISTS check has passed, locks are released.

The best solution is to add the table hint "WITH (UPDLOCK)" in the
EXISTS query. This would make USER2 in this example to be blocked
already at this point. If you just use SET TRANSACTION ISOLATION
LEVEL, the two processes will deadlock.

One way to test issues like this, is to insert a WAITFOR in the code,
and then run from separate windows in Query Analyzer.

--
Erland Sommarskog, SQL Server MVP, esquel@.sommarskog.se

Books Online for SQL Server SP3 at
http://www.microsoft.com/sql/techin.../2000/books.asp|||Erland, why do you say " If you just use SET TRANSACTION ISOLATION
LEVEL, the two processes will deadlock." ?

Suppose T1 executes with SERIALIZABLE and T2 tries to execute the same
proc at the same time ... Well, as far as I understand, T2 will wait
for T1 to finish and then go on.. right? Why exactly is " WITH
(UPDLOCK) " necessary?

If it's not a problem for you, could you provide me a safe (deadlock
free) example of insert procedure that would check the existance of the
record before inserting?

Thanks for all.

Leonardo.|||(leodippolito@.gmail.com) writes:
> Erland, why do you say " If you just use SET TRANSACTION ISOLATION
> LEVEL, the two processes will deadlock." ?
> Suppose T1 executes with SERIALIZABLE and T2 tries to execute the same
> proc at the same time ... Well, as far as I understand, T2 will wait
> for T1 to finish and then go on.. right? Why exactly is " WITH
> (UPDLOCK) " necessary?

Because with plain serializable this happens:

T1 performs NOT EXISTS check, and retains a shared lock
T2 performs NOT EXISTS check, and retains a shared lock
T1 tries to insert, but is blocked by T2
T2 tries to insert, but is blocked by T1
=> Deadlock

UPDLOCK is a shared lock, so it does not block other readers. However,
only one process have an UPDLOCK on a resource, so T2 would be blocked
until T1 has committed. And when T2 goes ahead, T2 finds that the rows
is already there, and does not try to insert.

> If it's not a problem for you, could you provide me a safe (deadlock
> free) example of insert procedure that would check the existance of the
> record before inserting?

Hey, that's what I leave as an exercise to the reader. :-) Seriously,
I encourage you to try these things by running from separate windows
in Query Analyzer, and try the various possibilities, to see what deadlocks,
what gives errors and what works smoothly. This is a good lab exercise
to get an understanding of things. What is problematic is to emulate
the concurrency, but some WAITFOR statements are usually good enough.

--
Erland Sommarskog, SQL Server MVP, esquel@.sommarskog.se

Books Online for SQL Server SP3 at
http://www.microsoft.com/sql/techin.../2000/books.asp

Monday, February 20, 2012

question on AqcuireConnection

Hi,

I created a function that supposedly checks a connection manager if a connection can be established.
When I was testing the code, I found out that the following code always returns "Successful" for flat files and SMTP connection even if the flat file does not even exist or there are no connection parameters for SMTP.

Can you tell me what to use to check if a connection can be established for all types of connection managers?

Here is the function that I created which does not seem to work as I expected:

Public Function connect(ByVal connMgr As Object) As String
Dim connected As String
Try
Dts.Connections(connMgr.name).AcquireConnection(Nothing)
Return "Successful"
Catch ex As Exception
Return "Failure"
Finally
Dts.Connections(connMgr.name).ReleaseConnection(Nothing)
End Try
End Function

Thanks.

AcquireConnection returns an object that represents the connection. You need to check this object. It will be different for each connection manager.

An ADO.NET connection manager will return an IDbConnection object.

The SMTP Connection manager simply returns the connection string of the connection manager.

There isn't a generic way to determine if a connection can be established for all types of connection managers.
|||

A flat file does not need to exist for AcquireConnection to be successful. It can point to a destination file to be created at the runtime.

Thanks.

Question of SQLAgentMail and SQL Mail

Hi,
I need monitoring scheduling jobs, alerts and database
maintenance from daily manually checks to automation. If
any of them failed while execute, it should be
automatically email to operator. I knew it can be done by
configuring SQLAgentMail and SQL Mail, but how to
configuring? Any particular software need install such as
MS exchange server to the production SQL Server or other
requests? Also can anyone tell which link I should to
follow?
Thanks for all the help!
-Jenny
http://www.aspfaq.com/2403
http://www.aspfaq.com/
(Reverse address to reply.)
"Jenny" <jey@.iseoptions.com> wrote in message
news:601201c474df$220c7fb0$a401280a@.phx.gbl...
> Hi,
> I need monitoring scheduling jobs, alerts and database
> maintenance from daily manually checks to automation. If
> any of them failed while execute, it should be
> automatically email to operator. I knew it can be done by
> configuring SQLAgentMail and SQL Mail, but how to
> configuring? Any particular software need install such as
> MS exchange server to the production SQL Server or other
> requests? Also can anyone tell which link I should to
> follow?
> Thanks for all the help!
> -Jenny
>
|||Have a look at
SQL Mail
http://support.microsoft.com/default...;en-us;Q315886
http://support.microsoft.com/default...;en-us;Q321183
http://support.microsoft.com/default...;en-us;Q263556
http://support.microsoft.com/default...;en-us;Q311231
http://support.microsoft.com/default...;en-us;Q281293
Support Web Cast
http://support.microsoft.com/service...lurb091301.asp
HTH
Jasper Smith (SQL Server MVP)
http://www.sqldbatips.com
I support PASS - the definitive, global
community for SQL Server professionals -
http://www.sqlpass.org
"Jenny" <jey@.iseoptions.com> wrote in message
news:601201c474df$220c7fb0$a401280a@.phx.gbl...
> Hi,
> I need monitoring scheduling jobs, alerts and database
> maintenance from daily manually checks to automation. If
> any of them failed while execute, it should be
> automatically email to operator. I knew it can be done by
> configuring SQLAgentMail and SQL Mail, but how to
> configuring? Any particular software need install such as
> MS exchange server to the production SQL Server or other
> requests? Also can anyone tell which link I should to
> follow?
> Thanks for all the help!
> -Jenny
>

Question of SQLAgentMail and SQL Mail

Hi,
I need monitoring scheduling jobs, alerts and database
maintenance from daily manually checks to automation. If
any of them failed while execute, it should be
automatically email to operator. I knew it can be done by
configuring SQLAgentMail and SQL Mail, but how to
configuring? Any particular software need install such as
MS exchange server to the production SQL Server or other
requests? Also can anyone tell which link I should to
follow?
Thanks for all the help!
-Jennyhttp://www.aspfaq.com/2403
http://www.aspfaq.com/
(Reverse address to reply.)
"Jenny" <jey@.iseoptions.com> wrote in message
news:601201c474df$220c7fb0$a401280a@.phx.gbl...
> Hi,
> I need monitoring scheduling jobs, alerts and database
> maintenance from daily manually checks to automation. If
> any of them failed while execute, it should be
> automatically email to operator. I knew it can be done by
> configuring SQLAgentMail and SQL Mail, but how to
> configuring? Any particular software need install such as
> MS exchange server to the production SQL Server or other
> requests? Also can anyone tell which link I should to
> follow?
> Thanks for all the help!
> -Jenny
>|||Have a look at
SQL Mail
http://support.microsoft.com/defaul...b;en-us;Q315886
http://support.microsoft.com/defaul...b;en-us;Q321183
http://support.microsoft.com/defaul...b;en-us;Q263556
http://support.microsoft.com/defaul...b;en-us;Q311231
http://support.microsoft.com/defaul...b;en-us;Q281293
Support Web Cast
]
HTH
Jasper Smith (SQL Server MVP)
[url]http://www.sqldbatips.com" target="_blank">http://support.microsoft.com/servic...sqldbatips.com
I support PASS - the definitive, global
community for SQL Server professionals -
http://www.sqlpass.org
"Jenny" <jey@.iseoptions.com> wrote in message
news:601201c474df$220c7fb0$a401280a@.phx.gbl...
> Hi,
> I need monitoring scheduling jobs, alerts and database
> maintenance from daily manually checks to automation. If
> any of them failed while execute, it should be
> automatically email to operator. I knew it can be done by
> configuring SQLAgentMail and SQL Mail, but how to
> configuring? Any particular software need install such as
> MS exchange server to the production SQL Server or other
> requests? Also can anyone tell which link I should to
> follow?
> Thanks for all the help!
> -Jenny
>

Question of SQLAgentMail and SQL Mail

Hi,
I need monitoring scheduling jobs, alerts and database
maintenance from daily manually checks to automation. If
any of them failed while execute, it should be
automatically email to operator. I knew it can be done by
configuring SQLAgentMail and SQL Mail, but how to
configuring? Any particular software need install such as
MS exchange server to the production SQL Server or other
requests? Also can anyone tell which link I should to
follow?
Thanks for all the help!
-Jennyhttp://www.aspfaq.com/2403
--
http://www.aspfaq.com/
(Reverse address to reply.)
"Jenny" <jey@.iseoptions.com> wrote in message
news:601201c474df$220c7fb0$a401280a@.phx.gbl...
> Hi,
> I need monitoring scheduling jobs, alerts and database
> maintenance from daily manually checks to automation. If
> any of them failed while execute, it should be
> automatically email to operator. I knew it can be done by
> configuring SQLAgentMail and SQL Mail, but how to
> configuring? Any particular software need install such as
> MS exchange server to the production SQL Server or other
> requests? Also can anyone tell which link I should to
> follow?
> Thanks for all the help!
> -Jenny
>|||Have a look at
SQL Mail
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q315886
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q321183
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q263556
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q311231
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q281293
Support Web Cast
http://support.microsoft.com/servicedesks/webcasts/wc091301/wcblurb091301.asp
--
HTH
Jasper Smith (SQL Server MVP)
http://www.sqldbatips.com
I support PASS - the definitive, global
community for SQL Server professionals -
http://www.sqlpass.org
"Jenny" <jey@.iseoptions.com> wrote in message
news:601201c474df$220c7fb0$a401280a@.phx.gbl...
> Hi,
> I need monitoring scheduling jobs, alerts and database
> maintenance from daily manually checks to automation. If
> any of them failed while execute, it should be
> automatically email to operator. I knew it can be done by
> configuring SQLAgentMail and SQL Mail, but how to
> configuring? Any particular software need install such as
> MS exchange server to the production SQL Server or other
> requests? Also can anyone tell which link I should to
> follow?
> Thanks for all the help!
> -Jenny
>