We have encountered deadlock on a table which is used to generate
sequential numbers for different categories eg typical entries
Category Value
TRADE_NO 1456
JOB_NO 267
.....
The applications reference the relevant category applicable to them
and update
the Value accordingly. This is table is very small, occupying 1 page.
However, it has no index as it was not seen to be appropriate for a
table this size.
However, can someone please advise whether
1. An index is required for row level locking
2. If an index on a table as small as above is likely to reduce the
deadlock rate.
Also, please consider the following but which I am not sure is
relevant for above query.
We noted that when we migrated the database concerned from SQL 6.5 to
SQL 2000, using DTS, that the database was NOT strictly in SQL 2000
format for non clustered indexes (NC) ie the clustered key was not
part of the NC index until the clustered index was rebuilt.
Given this should I just rebuild this table with a fake index and drop
it thereafter.
We are aware of the different techniques used to avoid deadlocks (eg
tables accessed in same order etc) and have , as much as possible,
implemented those practices.
I thank you in advance for any help you may be able to offer.
HiIs it possible to force row level locking in one or more tables insome database. We have some problems when SQL Server decides to choosepage- or table-level locking.We are using SQL Server 2000.Best regardsAarno
Hi, Can anybody please explain me, what is low level and high level locking in SQL Server 2005 database. Also what is the name of process which converts low level locking into high level locking and vise versa. -Sanjeev
I have a busy transactional table , I wanna use row level locking mechanism in msSQL. SELECT * FROM PARTY WITH (UPDLOCK ROWLOCK) where LastName ='Clinton' is there any downsides of this approach?
I used sp_indexoption to allow row locks and disallow page locks on all indexes of a heavily contented table (lots of concurrent selects/inserts/updates). The first error I saw was "The SQL Server cannot obtain a LOCK resource at this time. Rerun your statement when there are fewer active users or ask the system administrator to check the SQL Server lock and memory configuration.". I restarted the sql server and everything is ok (the server is not very powerful and will be beefed up).
My question is that with the above settings, will the select statements acquire row-level shared locks as well? Since our select queries are fairly complicated, my main concern is that we may frequently run of of resource even with a more powerful machine. Is my concern valid or I got everything wrong?
yes, There is a 'insert row level locking' but Is there anything for delete or update row level locking?
We keep geting deadlock problem with our application with multi-users. First we ran into the deadlock on INSERT. By setting 'insert row level locking' help us to go a little bit further but later we run into deadlock with DELETE. For my knowlege, DELETE and UPDATE requires exclusive page lock. Might be I am out of date.
I am writing a VB program, which needs to update record A in one table using transaction control (BeginTrans & CommitTrans). But due to the page-level locking, before the "CommitTrans", other users couldn't not read other records in the same table.
Is there any way that I can do the record/row level locking? If possible, could you provide me some VB source code? Such as how to use "DBCC ROWLOCK" or how to set for row-level locking.
SQL Server 6.5 on-line help states that IRL is only effective if the table has a unique clustered index defined on the table. IF this true and if so does anyone know why.
We have one table.We have updated the status for one column to 1 and we did not committed the transaction. Can we do an another update on another row.
In below example i am updating GEO_D and transaction is not committed. Now my requirement is we have to update other records (not Geo_D). If try to update GEo_D it should wait.
IF OBJECT_ID('TEMPDB..##TEMP_STSTUS') IS NOT NULL DROP TABLE ##TEMP_STSTUS CREATE TABLE ##TEMP_STSTUS ( ID INT IDENTITY(1,1) ,NAME VARCHAR(10) ,STSTUS VARCHAR(10) ) INSERT INTO ##TEMP_STSTUS SELECT 'GEO_D','0'
I m using sql server 2005 i have got one request ,to apply page level locking on database can nyone how it is done i can do that for a single script and for session(transaction isolation level) but dont know about database level locking scheme
We are writing a web-based multi-user call centre application application.
we are getting concurrency problems as you would expect with a multiuser application.
the application is made for callers who will bring up a different contact to call based on some predefined priority. now because the algorithm that prioritises the contacts takes a good 2 seconds to run, if 2 different caller request for the next prioritised contact, they will retrieve the same contact.
The only way that we think can resolve this problem is by building a queue. The queue would be implemented as a table, the particular implementation of this queue would be, when ever someone retrieves an entry from the queue, a background process will go on and generate a new queued item, i.e. in a FIFO manner. So that's how we think we should implement the queue.
Now come the question how to implement it. My idea is to have row level locking and a trigger to remove queue items from the queue. so that once one caller have looked at one of the item in the queue, another user can't look at the same item.
Any suggestions as to how i might be able to avoid concurrency problems?
What do you all think of my idea of implementing the FIFO queue?/ Is it possible to do row level locking in such a way that other users won't even be able to read the locked entry??
I am running one maintenance plan which includes just "Chech DB Integrity" and "Reorganised Index". But it failed and I am getting following error:-
Failed-1073548784) Executing the query "ALTER INDEX [CgiExclusion_ProfileId] ON [dbo].[CgiExclusion] REORGANIZE WITH ( LOB_COMPACTION = ON )" failed with the following error: "The index "CgiExclusion_ProfileId" (partition 1) on table "CgiExclusion" cannot be reorganized because page level locking is disabled.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
I have a question on locking pattern of read committed with snapshot isolation level that when two transaction update two different records then why do they block to each other even if they have previous committed value (old version of record).
I executed the below batch from a query window in SSMS
--Session 1: use adventureworks create table marbles (id int primary key, color char(5)) insert marbles values(1, 'Black') insert marbles values(2, 'White') alter database adventureworks set read_committed_snapshot on set transaction isolation level read committed begin tran update marbles set color = 'Black' where color = 'White'
--commit tran
Before committing the first transaction I executed below query from second query window in SSMS
--Session 2: use adventureworks set transaction isolation level read committed begin tran update marbles set color = 'White' where color = 'Black' commit tran
Here the first session blocks to second session. These same transactions execute simultaneuosly in snapshot isolation level. So my question is why this blocking is required in read committed with snapshot isolation level?
Is it possible to force row level locking in Sql server 2015 before inserting the data and release the same afterwords..find the code for which we would like to impliment the same
We are using an Access 2000 project to view our SQL Tables and using Access 2000 Runtime to Access the forms in the project. We have written in a locking system in VB and removed the video controls to prevent users from accessing the same records. But of course now we need to make the video controls available. This has now thrown up the problem of multiple users accessing the same records. We have tried to write code to lock records when then video controls are used but this is not working as well as we hoped. Can anyone please suggest any way of setting up locking on SQL using triggers from the Access frontend? or any other types of locking systems that could be written in the Access front end.
Insert or update statements seems to be locking entire page or table rather than locking the corresponding row to be inserted or updated.
lets assume the table with 3 rows.
scenario 1) In transaction A, I'm updating the 3'rd row. and in another transaction B I'm reading row 1. Transaction B seems to be waiting for transaction A to finish before returning the select results.
Scenario 2) In transaction A, I'm inserting new row (4'th row) and in another transaction B I'm reading row 1. here as well trasaction B does not return the row 1 unless transaction A is complete. Select operation is blocked due to insert.
Ideally in both the scenarios , read operation should have returned the results without waiting for update/insert to finish. As the read is being done on different rows than that of being updated or inserted. I have tried both the insert/update as well as select queries with all the possible locking hints such as ROWLOCK, READCOMMITED, UPDLOCK etc... The only way select query returns the row without blocking is by using the NOLOCK locking hint. But then this is not the proper solution as it gives us the dirty read.
Please suggest me any solution or workaround for above issue.
Hi, I wonder if anyone can shed some light on this issue -
We have a client/server program for MSSQL7 and MSSQL2000. When running client/server - we have our own broker, etc, the program ends up locking itself on SQL2000; this is not a problem on SQL7. We noticed that it seems some system tables locking tempdb. We also noticed that SQL2000 no longer has insert-into/bulkcopy option like SQL7. But, here we don't have temporary tables at all. It's just that we found the lockings in tempdb caused by some sysobjects, sysindexes, etc. Also, this does not happen to all the systems we have. Some of our machine does not have the self-lock problem; most of the machines have this problem though.
If we don't run client/server, then the program works fine. Same logic, the difference is when we use client/server logic to connect to the remote SQLServer 2000 server, the locking might happen on most of our machines.
Anyone is familiar with tempdb and locking issues, please provide some hint??? Is it possible that there are some system parameters that we can set to avoid the problem. We haven't found out why some of our machines do not have problem, while most of the machines have this locking problem.
We are running a 3rd party ETL tool to populate a denormailized version of a production database for reports. Everything works fine 95% of the time. However there is a semi-rare occurence of the ETL tool hanging up. The norm is for the tool to take about 5 times longer than usual, but it still works. Over the weekend however it through an error saying:
The SQL Server cannot obtain a LOCK resource at this time. Rerun your statement when there are fewer active users or ask the system administrator to check the SQL Server lock and memory configuration.
The reports are run through Crystal using stored procs and are all basically select statements
So my question(s) are the following: 1. What kind of lock would a report put on a table (select statement) 2. Would it make sense to change stored procs to use WITH NOLOCK? 3. Or is something else going on?
I hope that I am not asking a question which has been answered many times in the past, I did a search but could not find an answer. These may be beginner questions, so bear with me as I am something of a beginner.
This week our organization updated from SQL 2000 to SQL 2005. We are using a Microsoft Access front end for this data and the information is entered through forms into the correct tables. When our researchers are enter the information they also have to sometimes search existing information to ensure they do not duplicate what is already in there. For this we use several access queries. This has worked well on the SQL 2000 server without any issues. However, now that we are on 2005 we are starting to recieve ODBC Call fail errors and errors which specify that they are a result of a deadlock. My first question is, are the ODBC call fail errors possibly locks which caused the ODBC connection to time out? My second question is why am I recieving these errors in 2005 but not 2000?
we are having an requirement to log the unauthorized backend update on database.Is there any other way ,apart from going and creating the triggers at each table to log the backend update.
Note :Is Database base level trigger is possible on SQL Server 2000?
Devteam writes "Hi, WIndows version 5.0 (SP4) I am using sql server 2000. in our application i am using simple select statement to retrieve the value from the database. Sometime the same query is accessed i did not get the result.i have tried to run the same query using query analyzer. but the query is keep on running. at the same time when accessing other rows in the table, it gets retrieve the values.
what is the problem here... is there anything locked that the row before executing the select statement. if there is any lock is present then how to identify it and also how to prevent a row from locking... if the lock is occured then the other transactions also not executed. why the lock is placed in the first place."
I have an SQL database that I need to detach from an SQL2005 server and reattach to an SQL 2000 database. I tried to set the Compatibility level from SQL Server 2005 (90) to SQL Server 2000 (80). This did not work
Hello, Is there any ability to do database-level triggers in SQL 2000? I have a SQL 2000 database, and I was asked if we could create a trigger that whenever anyone touches the data in a database, to create an entry in an event log? If not, I have a main table I can put a trigger on; however, my question is how do you write to a file in a trigger as well? Thanks.
We had a disaster last week (SAN Corruption) and it hit a bunch of my sql serves. I have been able to recover all but one. The one I am having a problem with is a NAMED Instance that I obviously don't know the original SP level on. When I try to restore MSDB it won't let me because of a version conflict Is there any way to tell what the SP Level is either from a system DB .mdf or LDF file or from a backup file without restoreing? Right now I'm installing SQL Server to a test server and I'm going to try and restore the system dbs at each patch level.. seems like there must be a better way!!
I want to perform column level and database level encryption/decryption.... Does any body have that code written in C# or VB.NET for AES-128, AES-192, AES-256 algorithms... I have got code for single string... but i want to encrypt/decrypt columns and sometimes the whole database... Can anybody help me out... If you have Store procedure in SQL for the same then also it ll do... Thanks in advance
I have a stored procedure that takes 18 hours to complete. SometimesI get the below error message when I run the stored procedure.'Server : Msg 9002, Level 17, State 6, Line 1 The log file fordatabase 'Customer' is full. Back up the transaction log for thedatabase to free up some log space.'.I checked my log file and it is not full. And I don't know why I amgetting this message. Any help is appreciated.Thanks,Anjula
When you utilize transactions in ADO.NET are the locks put on the entire TABLE used or at the row level? For instance if you do a SELECT within a transaction if you only pull 5 rows out of a 1000 row table can you just make it lock the rows that have been pulled? It seems like it locks the entire table?