Archive for the ‘SQL Server 2008 R2’ Category
Posted by Jugal Shah on February 12, 2012
Problem: Take an example you are writing a script which is going to be deployed on the all the versions of SQL Servers and you want to check the SQL Server version details using T-SQL code. Below solution will guide you how to check the SQL Server version in stored procedure/t-sql batch.
Solution: You can use the @@MICROSOFTVERSION to get the SQL Server version information. If the output of the below script is 9 than its SQL 2005, if 10 than SQL Server 2008 and if 11 than SQL Server 2011
select @@VERSION
--method - 1
select @@MICROSOFTVERSION as MSVersion, CAST (@@MICROSOFTVERSION as BINARY(5)) as MsVersionInBinary
-- Remove the first non-zero character after 0x0 from binary output here it is A and divide the @@MicrosoftVersion outout
select substring(cast(@@MICROSOFTVERSION/0x000000640 as varchar(10)),1,2) as MsSQLVersion
--Method 2
select @@MICROSOFTVERSION / POWER(2,24) as usingPowerFunctionMSSQLVersion

Posted in Database, SQL Scripts, SQL Server, SQL Server 2008, SQL Server 2008 R2, SQL Server 2011 (Denali) | Tagged: @@MICROSOFTVERSION, How to check SQL Version, Jugal Shah, SQL Script, SQLDBPool, T-SQL | Leave a Comment »
Posted by Jugal Shah on February 12, 2012
A deadlock occurs when two or more processes permanently block each other by each process having a lock on a resource which the other process are trying to lock.
Please execute the below queries as per the mentioned comments to produce a deadlock.
--turning on the traceflag to record deadlock info into error log
dbcc traceon(1204,-1)
dbcc tracestatus(1204)
--creating test database
create database sqlDBPool
--Connecting to SQLDBPool database
use sqldbpool
--table creation
create table tb1 (col1 int)
create table tb2 (col1 int)
--inserting dummy records
insert into tb1 values(1),(2),(3)
insert into tb2 values(1),(2),(3)
--Open first connection to update table explicit transaction
begin transaction
update tb1 set col1 = 5
--Open second connection to update table explicit transaction
use sqlDBPool
begin transaction
update tb2 set col1 = 6
update tb1 set col1 = 6
--Open first connection to update table explicit transaction
update tb2 set col1 = 5
You can see the one of the transaction will fail with the below error message.
Msg 1205, Level 13, State 45, Line 3
Transaction (Process ID 55) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.
As we have turned on the deadlock trace flag, you can see the below information in the SQL Server error log.
Starting up database 'sqlDBPool'.
Deadlock encountered .... Printing deadlock information
Wait-for graph
NULL
Node:1
RID: 9:1:153:0 CleanCnt:2 Mode:X Flags: 0x3
Grant List 1:
Owner:0x05684480 Mode: X Flg:0x40 Ref:0 Life:02000000 SPID:52 ECID:0 XactLockInfo: 0x065F82A8
SPID: 52 ECID: 0 Statement Type: UPDATE Line #: 1
Input Buf: Language Event: update tb2 set col1 = 5
Requested by:
ResType:LockOwner Stype:'OR'Xdes:0x05A8CC10 Mode: U SPID:55 BatchID:0 ECID:0 TaskProxy:(0x05A70354) Value:0x6767b20 Cost:(0/432)
NULL
Node:2
RID: 9:1:155:0 CleanCnt:2 Mode:X Flags: 0x3
Grant List 2:
Owner:0x067679A0 Mode: X Flg:0x40 Ref:0 Life:02000000 SPID:55 ECID:0 XactLockInfo: 0x05A8CC38
SPID: 55 ECID: 0 Statement Type: UPDATE Line #: 3
Input Buf: Language Event: begin transaction update tb2 set col1 = 6 update tb1 set col1 = 6
Requested by:
ResType:LockOwner Stype:'OR'Xdes:0x065F8280 Mode: U SPID:52 BatchID:0 ECID:0 TaskProxy:(0x0941A354) Value:0x6a943a0 Cost:(0/432)
NULL
Victim Resource Owner:
ResType:LockOwner Stype:'OR'Xdes:0x05A8CC10 Mode: U SPID:55 BatchID:0 ECID:0 TaskProxy:(0x05A70354) Value:0x6767b20 Cost:(0/432)
Posted in Database, DB Articles, SQL Scripts, SQL Server, SQL Server 2008, SQL Server 2008 R2, SQL Server 2011 (Denali) | Tagged: Deadlock, deadlock scenario, Deadlock trace flag, Jugal Shah, Script, SQLDBPool, T-SQL | 2 Comments »
Posted by Jugal Shah on February 11, 2012
Sp_Configure procedure is used to display or change the SQL Server setting. Once you execute the SP_Configure procedure it will display the below columns in the output.
name – Name of the configuration parameter
minimum – Minimum value setting that is allowed
maximum – Maximum value that is allowed
config_value – value which currently configured
run_value – value which currently running
How to update the configuration value?
Here I will show you how to enable the XP_CmdShell using SP_Configure. Please note don’t update configuration values until you are sure, otherwise it will affect the your SQL Server performance and behavioral.
--XP_Cmdshell is an andvanced option, enbale the advanced option
EXEC sp_configure 'show advanced options', 1
GO
--Enable the advance option
RECONFIGURE
GO
--enable the xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
--Reconfigure the xp_cmdshell value
RECONFIGURE
GO
What is the difference between Config_Value and Run_Value?
When we change the Configuration Parameter value as above it will update the Config_Value filed only, but wouldn’t be in effect until you run reconfigure command. Once the reconfigure command execute or SQL Server restarted, SQL Server will run as per the new configured value.
You can get the description of the configuration parameters from books online or you can query sys.configurations and check for the description column.
select
*
from
sys.configurations
Output of the Sp_Configure
|
Name
|
Minimum |
Maximum |
Value |
Run Value |
|
access check cache bucket count
|
0
|
16384
|
0
|
0
|
|
access check cache quota
|
0
|
2147483647
|
0
|
0
|
|
Ad Hoc Distributed Queries
|
0
|
1
|
0
|
0
|
|
affinity I/O mask
|
-2147483648
|
2147483647
|
0
|
0
|
|
affinity mask
|
-2147483648
|
2147483647
|
0
|
0
|
|
Agent XPs
|
0
|
1
|
1
|
1
|
|
allow updates
|
0
|
1
|
0
|
0
|
|
awe enabled
|
0
|
1
|
0
|
0
|
|
backup compression default
|
0
|
1
|
0
|
0
|
|
blocked process threshold (s)
|
0
|
86400
|
0
|
0
|
|
c2 audit mode
|
0
|
1
|
0
|
0
|
|
clr enabled
|
0
|
1
|
0
|
0
|
|
common criteria compliance enabled
|
0
|
1
|
0
|
0
|
|
cost threshold for parallelism
|
0
|
32767
|
5
|
5
|
|
cross db ownership chaining
|
0
|
1
|
0
|
0
|
|
cursor threshold
|
-1
|
2147483647
|
-1
|
-1
|
|
Database Mail XPs
|
0
|
1
|
0
|
0
|
|
default full-text language
|
0
|
2147483647
|
1033
|
1033
|
|
default language
|
0
|
9999
|
0
|
0
|
|
default trace enabled
|
0
|
1
|
1
|
1
|
|
disallow results from triggers
|
0
|
1
|
0
|
0
|
|
EKM provider enabled
|
0
|
1
|
0
|
0
|
|
filestream access level
|
0
|
2
|
0
|
0
|
|
fill factor (%)
|
0
|
100
|
0
|
0
|
|
ft crawl bandwidth (max)
|
0
|
32767
|
100
|
100
|
|
ft crawl bandwidth (min)
|
0
|
32767
|
0
|
0
|
|
ft notify bandwidth (max)
|
0
|
32767
|
100
|
100
|
|
ft notify bandwidth (min)
|
0
|
32767
|
0
|
0
|
|
index create memory (KB)
|
704
|
2147483647
|
0
|
0
|
|
in-doubt xact resolution
|
0
|
2
|
0
|
0
|
|
lightweight pooling
|
0
|
1
|
0
|
0
|
|
locks
|
5000
|
2147483647
|
0
|
0
|
|
max degree of parallelism
|
0
|
64
|
0
|
0
|
|
max full-text crawl range
|
0
|
256
|
4
|
4
|
|
max server memory (MB)
|
16
|
2147483647
|
2147483647
|
2147483647
|
|
max text repl size (B)
|
-1
|
2147483647
|
65536
|
65536
|
|
max worker threads
|
128
|
32767
|
0
|
0
|
|
media retention
|
0
|
365
|
0
|
0
|
|
min memory per query (KB)
|
512
|
2147483647
|
1024
|
1024
|
|
min server memory (MB)
|
0
|
2147483647
|
0
|
0
|
|
nested triggers
|
0
|
1
|
1
|
1
|
|
network packet size (B)
|
512
|
32767
|
4096
|
4096
|
|
Ole Automation Procedures
|
0
|
1
|
0
|
0
|
|
open objects
|
0
|
2147483647
|
0
|
0
|
|
optimize for ad hoc workloads
|
0
|
1
|
0
|
0
|
|
PH timeout (s)
|
1
|
3600
|
60
|
60
|
|
precompute rank
|
0
|
1
|
0
|
0
|
|
priority boost
|
0
|
1
|
0
|
0
|
|
query governor cost limit
|
0
|
2147483647
|
0
|
0
|
|
query wait (s)
|
-1
|
2147483647
|
-1
|
-1
|
|
recovery interval (min)
|
0
|
32767
|
0
|
0
|
|
remote access
|
0
|
1
|
1
|
1
|
|
remote admin connections
|
0
|
1
|
0
|
0
|
|
remote login timeout (s)
|
0
|
2147483647
|
20
|
20
|
|
remote proc trans
|
0
|
1
|
0
|
0
|
|
remote query timeout (s)
|
0
|
2147483647
|
600
|
600
|
|
Replication XPs
|
0
|
1
|
0
|
0
|
|
scan for startup procs
|
0
|
1
|
0
|
0
|
|
server trigger recursion
|
0
|
1
|
1
|
1
|
|
set working set size
|
0
|
1
|
0
|
0
|
|
show advanced options
|
0
|
1
|
1
|
1
|
|
SMO and DMO XPs
|
0
|
1
|
1
|
1
|
|
SQL Mail XPs
|
0
|
1
|
0
|
0
|
|
transform noise words
|
0
|
1
|
0
|
0
|
|
two digit year cutoff
|
1753
|
9999
|
2049
|
2049
|
|
user connections
|
0
|
32767
|
0
|
0
|
|
user options
|
0
|
32767
|
0
|
0
|
|
xp_cmdshell
|
0
|
1
|
1
|
1
|
Posted in DB Articles, SQL Scripts, SQL Server, SQL Server 2008, SQL Server 2008 R2 | Tagged: Configuration Parameters, How to enable XP_CmdShell, Jugal Shah, SP_Configure, SQL Script, SQLDBPool, T-SQL | 1 Comment »
Posted by Jugal Shah on February 3, 2012
Execute below query to get TOP 25 completed queries which have the highest cumulative CPU usage
SELECT highest_cpu_queries.plan_handle,
(highest_cpu_queries.total_worker_time/highest_cpu_queries.execution_count) AS AverageCPU, highest_cpu_queries.execution_count, highest_cpu_queries.total_worker_time, highest_cpu_queries.plan_generation_num, highest_cpu_queries.creation_time, highest_cpu_queries.last_execution_time,
highest_cpu_queries.last_physical_reads, highest_cpu_queries.min_physical_reads,
q.dbid, q.objectid, q.number, q.encrypted, q.[text]
FROM (SELECT TOP 25 qs.plan_handle, qs.total_worker_time, qs.last_execution_time,
qs.plan_generation_num, qs.creation_time, qs.execution_count, qs.last_physical_reads,
qs.min_physical_reads FROM sys.dm_exec_query_stats qs
ORDER BY qs.total_worker_time DESC) AS highest_cpu_queries
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS q
ORDER BY AverageCPU DESC
Above script will return the queries which are completed. You can check the active sessions and CPU details using below query.
SELECT SPID, CPU, s2.text, open_tran, status, program_name,
net_library, loginame FROM sys.sysprocesses
CROSS APPLY sys.dm_exec_sql_text(sql_handle) AS s2
where cpu > 5000 and status = 'runnable'
18.520469
73.856621
Posted in SQL Scripts, SQL Server, SQL Server 2008, SQL Server 2008 R2 | Tagged: Jugal Shah, Performance Tuning, SQL Optimization, SQL Scripts, SQLDBPool, TSQL | 2 Comments »
Posted by Jugal Shah on February 3, 2012
If you will try to insert the value into Identity column you will get the one of the below error.
Error 1:
Msg 544, Level 16, State 1, Line 1
Cannot insert explicit value for identity column in table ‘Employee’ when IDENTITY_INSERT is set to OFF.
Error 2:
Error 8101 An explicit value for the identity column in table can only be specified when a column list is used and IDENTITY_INSERT is ON
Solution:
Write SET IDENTITY_INSERT table name ON before the insert script and SET IDENTITY_INSERT table name Off after insert script.
Example,
use db1
create table Employee
(
myID int identity(100,1),
name varchar(20)
)
insert into Employee(name) values('Jugal')
--if i will try to insert the value into Identity column it will fail
insert into Employee(myID,name) values (101,'DJ')
--you can add the data into identiy column by turning on the IDENTITY_INSERT ON
SET IDENTITY_INSERT Employee ON
insert into Employee(myID,name) values (101,'DJ')
SET IDENTITY_INSERT Employee OFF
18.520469
73.856621
Posted in SQL Scripts, SQL Server, SQL Server 2008, SQL Server 2008 R2 | Tagged: Identity, Jugal Shah, SQL Documentation, SQL Download, SQL Error Messages, SQL Query, SQL Scripts, SQL Security, SQL Server, SQL Tips and Tricks, SQLDBPool, T-SQL, Technology | 1 Comment »
Posted by Jugal Shah on January 29, 2012
Many times we got a call from the business team regarding the performance issue on the database server. As a first step you can check for the blocking, if the blocking is not there. We have to check for the waits, Query is internally waiting for the resources to complete its process.
By identifying the correct wait type will give you the directions to troubleshooting issue further. You can execute below query to get the 10 wait statistics.
SELECT TOP 10
wait_type ,
max_wait_time_ms wait_time_ms ,
signal_wait_time_ms ,
wait_time_ms - signal_wait_time_ms AS resource_wait_time_ms ,
100.0 * wait_time_ms / SUM(wait_time_ms) OVER ( )
AS percent_total_waits ,
100.0 * signal_wait_time_ms / SUM(signal_wait_time_ms) OVER ( )
AS percent_total_signal_waits ,
100.0 * ( wait_time_ms - signal_wait_time_ms )
/ SUM(wait_time_ms) OVER ( ) AS percent_total_resource_waits
FROM sys.dm_os_wait_stats
WHERE wait_time_ms > 0
ORDER BY wait_time_ms DESC
You have to checkout for the below kind of wait statistics and troubleshoot as per the stats.
CXPACKET :Most of the time it indicates nothing more than that certain queries are executing with parallelism; CXPACKET waits in the server are not an immediate sign of problems, it may be the symptom of another problem, associated with one of the other high value wait types in the instance.
SOS_SCHEDULER_YIELD :The tasks executing in the system are yielding the scheduler, having exceeded their quantum, and are having to wait in the runnable queue for other tasks to execute. This may indicate that the server is under CPU pressure.
THREADPOOL :A task had to wait to have a worker bound to it, in order to execute.
LCK_* :These wait types indicate that blocking is occurring in the system and that sessions have had to wait to acquire a lock of a specific type, which was being held by another database session. This problem can be investigated further using, for example, the information in the sys.dm_db_index_operational_stats.
PAGEIOLATCH_*, IO_COMPLETION, WRITELOG :These waits are commonly associated with disk I/O bottlenecks, though the root cause of the problem may be, and commonly is, a poorly performing query that is consuming excessive amounts of memory in the server.
PAGELATCH_* :Non-I/O waits for latches on data pages in the buffer pool. A lot of times PAGELATCH_* waits are associated with allocation contention issues. One of the best-known allocations issues associated with PAGELATCH_* waits occurs in tempdb when the a large number of objects are being created and destroyed in tempdb and the system experiences contention on the Shared Global Allocation Map (SGAM), Global Allocation Map (GAM), and Page Free Space (PFS) pages in the tempdb database.
LATCH_* :These waits are associated with lightweight short-term synchronization objects that are used to protect access to internal caches, but not the buffer cache. These waits can indicate a range of problems, depending on the latch type. Determining the specific latch class that has the most accumulated wait time associated with it can be found by querying the sys.dm_os_latch_stats DMV.
ASYNC_NETWORK_IO :This wait is often incorrectly attributed to a network bottleneck.
18.520469
73.856621
Posted in SQL Server, SQL Server 2008, SQL Server 2008 R2 | Tagged: ASYNC_NETWORK_IO, CXPacket, LATCH_*, PAGEIOLATCH_*, Resource Bottleneck, SOS_SCHEDULER_YIELD, SQL Optimization, THREADPOOL, Tuning, wait statistics | 2 Comments »
Posted by Jugal Shah on January 18, 2012
Problem: If there are multiple SQL instances running on the same computer, it is difficult to identify the instance port number. You can use the below solution to find the instance specific port numbers.
Solution: You can check the list of port number used by the SQL Server instances using one of the below way.
Soln 1# Using SQL Server Configuration Manager
- Go to SQL Server Configuration Manager
- Select Protocols for SQL2005/2008 under SQL server Network Configuration
- Right click on TCP/IP and select Properties
- Select the IP Addresses-tab
- In the section IP ALL, you can see the ports
Soln 2#From Registry Values
SQL Server 2005
Type the regedit command in Run window and check the below registry values.HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.#
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\ MSSQL.#\ MSSQLServer\ SuperSocketNetLib\TCP\IPAll
SQL Server 2008
Default instance
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQLServer\SuperSocketNetLib\TCP\IPAll
Named instance
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL10.(InstanceName)\MSSQLServer\SuperSocketNetLib\TCP\IPAll
Soln 3# Error Log
Query the error log as below to get the port number.
EXEC xp_readerrorlog 0,1,”Server is listening on”,Null
Soln 4# Command Prompts
Execute the below command from the command prompt.
Netstat -abn
18.520469
73.856621
Posted in SQL Scripts, SQL Server, SQL Server 2008, SQL Server 2008 R2, SQL Server 2011 (Denali) | Tagged: Default Port Number, SQL Troubleshooting, T-SQL Script, Unable to Connect | 3 Comments »
Posted by Jugal Shah on December 30, 2011
There are many scenarios where you have been alerted for the replication failure and you have to troubleshoot the issue. In this article I will guide you what should be your approach to get the detailed error message and transaction details in replication.
First check the replication monitor and click on the failed publisher. Next step is double click on the failed subscriber from All Subscriptions list.

Now next step is click on the error and check its description.
Error :
Command attempted:
if @@trancount > 0 rollback tran
(Transaction sequence number: 0x0000044100002D93000100000000, Command ID: 1)
From the above error message we have to identify which command is failed to execute on the subscriber.
To get the exact command, find out the distributer server and distribution database for the failed publisher.
Once you get the distribution database server, execute the below query against the distribution DB.
use distribution
go
SELECT * FROM msrepl_commands
WHERE xact_seqno = 0x0000044100002D93000100000000
AND command_id = 1
Once you execute the above query against the distribution database, you will get the more information about the error, for example Publisher database ID, Article ID and much more…

We have to use the above details, to get the exact command using either SP_BROWSEREPLCMDS (If CLR is enabled) or you can cast the command column in msrepl_commands table.
We will check both the alternatives.
Using SP_BROWSEREPLCMDS
Please note CLR must be enabled for to use this procedure.
EXEC SP_BROWSEREPLCMDS
@xact_seqno_start = '0x0000044100002D930001',
@xact_seqno_end = '0x0000044100002D930001',
@publisher_database_id = 1033,
@article_id = 12,
@command_id= 1

By casting command column in msrepl_commands table
Please note if you want to see the better output use the Result to Text as output in SSMS (CTRL + T)
SELECT CAST(SUBSTRING(command, 7, 8000) AS NVARCHAR(MAX))
FROM msrepl_commands
WHERE xact_seqno = 0x0000044100002D930001
AND command_id = 1
Now you got the exact SQL Command. As a next step check the objects from both the publisher and the subscriber to see the violation of the keys or do the data comparisons etc.
18.520469
73.856621
Posted in SQL Server, SQL Server 2008, SQL Server 2008 R2 | Tagged: msrepl_commands, Replication Troubleshooting, SP_BROWSEREPLCMDS, T-SQL Script, Transaction Replication | 1 Comment »
Posted by Jugal Shah on December 21, 2011
Problem
Log shipping has been an option for creating a fail over server for SQL Server for quite some time. In this tip, we look at different ways that you can monitor the status of your log shipped databases.
Solution
http://www.mssqltips.com/sqlservertip/2553/different-ways-to-monitor-log-shipping-for-sql-server-databases/
18.520469
73.856621
Posted in SQL Server 2008, SQL Server 2008 R2 | Tagged: Log-Shipping, Monitor LogShipping, T-SQL Script, Troubleshooting LogShipping | 1 Comment »
Posted by Jugal Shah on December 20, 2011
Problem: There could be situation where you missed the database transaction log file(.LDF) and you have only data file (.MDF). You can attach the database using below solution.
Solution: In the below script I have created the database,dropped its log file and created the database with the .mdf file.
--created database with .mdf and .ldf file
CREATE DATABASE [singleFileDemo] ON PRIMARY
( NAME = N'singleFileDemo', FILENAME = N'L:\singleFileDemo.mdf' , SIZE = 2048KB , FILEGROWTH = 10240KB )
LOG ON
( NAME = N'singleFileDemo_log', FILENAME = N'F:\singleFileDemo_log.ldf' , SIZE = 1024KB , FILEGROWTH = 5120KB )
GO
--inserting data into database
use singleFileDemo
create table tb1 (name varchar(10))
--inserting records
insert into tb1 values('Jugal')
go 10;
--deleting the log file
--detaching the database file
USE [master]
GO
EXEC master.dbo.sp_detach_db @dbname = N'singleFileDemo'
GO
-- now next step is delete the file manually or you can do it from command prompt
EXEC xp_cmdshell 'del F:\singleFileDemo_log.ldf'
-- script to attach the database
USE [master]
GO
CREATE DATABASE [singleFileDemo] ON
( FILENAME = N'L:\singleFileDemo.mdf' )
FOR ATTACH
GO
When you will execute the CREATE DATABASE FOR Attach script you will get the below warning message.
File activation failure. The physical file name "F:\singleFileDemo_log.ldf" may be incorrect.
New log file 'F:\singleFileDemo_log.LDF' was created.
Once the database is ready execute the DBCC CHECKDB for any error.
18.520469
73.856621
Posted in Database, SQL Server 2008, SQL Server 2008 R2, SQL Server 2011 (Denali) | Tagged: Attach Database, Create database, Database Troubleshooting, Delete file using SSMS, Detach Database, Disaster Recovery, Recover Corrupt Database, Restore Database, T-SQL Script | Leave a Comment »
Posted by Jugal Shah on December 8, 2011
xp_msver returns information about the SQL Server version, actual build number of the server and information about the server environment.

You can also pass the parameter to get the specific information.

18.520469
73.856621
Posted in SQL Server, SQL Server 2008, SQL Server 2008 R2, SQL Server 2011 (Denali) | Tagged: Configuration Parameters, SQL Configuration, SQL Properties, T-SQL Script | 1 Comment »
Posted by Jugal Shah on December 2, 2011
You can enable the database for replication using below script.
use master
exec sp_replicationdboption @dbname = 'sqldbpool',
@optname = 'publish',
@value = 'true'
go
If you have restore the database on test environment and you are getting the error that “Database is part of Replication”, you can clear/disable it by executing below query.
use master
exec sp_replicationdboption @dbname = 'sqldbpool',
@optname = 'publish',
@value = 'false'
go
18.520469
73.856621
Posted in Database, SQL Server, SQL Server 2008, SQL Server 2008 R2, SQL Server 2011 (Denali) | Tagged: DB Restore, Enable/Disable Database for Replication, Jugal Shah, replication, SQL Script, SQLDBPool | Leave a Comment »