Thursday, November 10, 2011

SQL Server Installation error !



I have got a request to install SQL Server 2005 Standard Edition with SP4. While installing database services it suddenly failed by throwing a pop - up. The error message :

"The SQL Server service failed to start. For more information, see the SQL Server Books Online topics, “How to: View SQL Server 2005 Setup Log Files” and “Starting SQL Server Manually "

I gone through the all security credentials and found everything is fine. Gone through the log files and found the windows server is running with 24 processors Where as SQL Server 2005 Standard Edition supports upto 4 processors. To resolve the issue follow the steps below.

1. Update windows config to use only one processor
2. Restart the windows server
3. Install SQL Server
4. Apply Service Pack 4
5. Change config to use default configuration
6. Restart the windows server
How to know the number of processors

Right Click on MyComputer --> Properties --> Goto Hardware Tab --> Clickon Device Manager --> Expand Processors



How to Config Windows Configuration to use number of Processors

Run Command --> msconfig  --> Goto BOOT.INI --> Click on Advanced Options



Restart the machine. Apply Service Pack 4 and change the configuration to use Normal Startup as below



Again restart the machine.
   
Note: This is only applicable for 32 bit machines.

Saturday, November 5, 2011

Thursday, November 3, 2011

Realtime Example for SSIS Transformations

Introduction:



List of 28 Transformations are as follows

S No

Transformation

Real Time Examples

1

Aggregate Summing / Averaging a total of the products purchased by a customer online to produce the final amount.

2

Audit For audit purpose, when we need to audit the logs to send to DBA’s for weekly or monthly auditing.

3

Character Map For sending mails (do some manipulations) to the end users to do some formatting we can use this task.

4

Conditional Split Morning feeds which we get from different systems need to be transferred to different tables based on the feed which we get so we can use this task to do some condition check.

5

Copy Column Morning feeds which needs to be transferred to tables need to be scanned under for cleaning spaces, empty values etc then we can go with this task

6

Data Conversion Daily monitoring of the input files and data to have proper datatype before mapping it to the table then we can use this task.

7

Data Mining Query Evaluating the input data against the analysis model to get a proper set.

8

Derived Column Adding a title of courtesy (Mr., Mrs., Dr, etc) before the name and removing the trailing and ending spaces.

9

Export Column When we get the normal files/pdf files/image files from different systems and save it under a particular folder and map it to the table master

10

Fuzzy Grouping Matching the name of a customer with master and child table and use it to group and get the desired set

11

Fuzzy Lookup Matching the name of a customer with master and child table and use it to group and get the desired set

12

Import Column When we get the normal files/pdf files/image files from different systems and save it under a particular folder and map it to the table master

13

Lookup Employee table information saved in a master file and the region wise data available across the table which can be mapped and joined to perform a joined querying operation

14

Merge Combine data from multiple data source like master and child employee table and get result in single dataset.

15

Merge Join Combine data from multiple data source like master and child employee table and get result in single dataset. Can use any type of join like inner, outer, left , right etc

16

Multicast Similar to the conditional split but this splits across all the parts

17

OLE DB Command Used when we need to do updates to all the rows of a table like update If a message sent to the entire customer who have made a payment today.

18

Percentage Sampling Can be used in cases like the package should have access to only limited data.

19

Pivot When data fetched from the table and do some formatting to show in the front end we can use it.

20

Row Count Any point to log the count of the number of customers so we can get the count using this

21

Row Sampling Same as Percentage Sampling.

22

Script Component Used for places where we need to use framework specific assemblies.

23

Slowly Changing Dimension When we need to use some historic dimensions of data

24

Sort To make some sorting to get the desired result. Sorting like customer who made the highest payment in a particular day.

25

Term Extraction Used to get a data from a large set of data and get the extracted output in a formatted set.

26

Term Lookup Used to get a data from a large set of data and get the extracted output in a formatted set.

27

Union All Used to get data from different data sources and get in a single dimensional format.

28

Unpivot Restructuring the format of the data for normalizing the input prior to loading.

Conclusion:

We have seen some real time examples where we use the transformations, these are some of the real time usage which I came across.

Thursday, September 15, 2011

How to Monitor Replication - Automate Replication Monitoring

Script to Automate The Replication Monitoring

Usually we need to monitor replication periodically through out the day. I have designed a solution to monitor replication form T-SQL. It'll send a mail to DBA team that replication is failing. Create the below two objects (Table and PROC) and create a job which calls the stored procedure for every 5 minutes.

This will save us a lot of time and effort for sure


CREATE TABLE dbo.repmonitor (

[ID] INT NOT NULL IDENTITY,

[status] int null,

warning int null ,

subscriber sysname null ,

subscriber_db sysname null ,

publisher_db sysname null ,

publication sysname null ,

publication_type int null ,

subtype int null ,

latency int null ,

latencythreshold int null ,

agentnotrunning int null ,

agentnotrunningthreshold int null ,

timetoexpiration int null ,

expirationthreshold int null ,

last_distsync datetime null ,

distribution_agentname sysname null ,

mergeagentname sysname null ,

mergesubscriptionfriendlyname sysname null ,

mergeagentlocation sysname null ,

mergeconnectiontype int null ,

mergePerformance int null ,

mergerunspeed float null ,

mergerunduration int null ,

monitorranking int null ,

distributionagentjobid binary(30) null ,

mergeagentjobid binary(30) null ,

distributionagentid int null ,

distributionagentprofileid int null ,

mergeagentid int null ,

mergeagentprofileid int null ,

logreaderagentname sysname null

)

--EXEC usp_replmonitor_Create

/*** Create the SPOC on Monitor Database ***/

/*** It requires the Publisher Name as parameter ***/

CREATE PROC usp_replmonitor_Create (@Publisher_Name VARCHAR(200))

AS

BEGIN

SET NOCOUNT ON

DECLARE @Pub_Type TINYINT

DECLARE @C INT

DECLARE @DBProfile VARCHAR(100)

DECLARE @ReplM TABLE

([ID] INT NOT NULL IDENTITY,

subscriber sysname null ,

publication sysname null ,

last_distsync datetime null

)

SELECT @DBProfile=Name FROM msdb.dbo.sysmail_profile WHERE Profile_ID=1

/*** Clears the previous data ***/

TRUNCATE TABLE repmonitor

/*** For Transactional Replication ***/

SET @Pub_Type=0

INSERT INTO repmonitor

EXEC [DSADistribution].[DBO].[sp_replmonitorhelpsubscription]

@publisher = @Publisher_Name,

@publication_type = @Pub_Type

/*** For Snapshot Replication ***/

SET @Pub_Type=1

INSERT INTO repmonitor

EXEC [DSADistribution].[DBO].[sp_replmonitorhelpsubscription]

@publisher = @Publisher_Name,

@publication_type = @Pub_Type

/*** For Merge Replication ***/

SET @Pub_Type=2

INSERT INTO repmonitor

EXEC [DSADistribution].[DBO].[sp_replmonitorhelpsubscription]

@publisher = @Publisher_Name,

@publication_type = @Pub_Type

/*** Check if any subscription is failing ***/

SET @C=0

SELECT @C=COUNT(1) FROM repmonitor WHERE Status=6

IF(@C>0)

BEGIN

DECLARE @String varchar(8000)

SET @String='Replication is Failing @ '+@Publisher_Name+

' for below Subscribers'+CHAR(13)+CHAR(13)

SET @String=@String+' Subscriber'+' '+' Publication'+char(13)

SELECT @String =@String+subscriber+' '+publication+char(13)

FROM repmonitor WHERE Status=6

/*** Notify DBA Group ***/

EXEC msdb.dbo.sp_send_dbmail

@profile_name = @DBProfile,

@recipients = 'DBAGroup@SQLServer.com',

@body = @String,

@subject = 'Replication is Failing';

END

END

Export to Excel from SQL Server database.

Export to Excel from SQL Server database.

We can use

Import / Export Wizard

BCP

OPENROWSET

Below stored procedure will make the task easy.

USE MASTER

/*** Make sure that the below are enabled on your server ***/

/*** Ad Hoc Remote Quires

XP_CMDSHELL

***/

/****** Object: StoredProcedure [dbo].[usp_ExportData_Excel]

Script Date: 10/05/2009 08:39:47 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

/*** Execution Example

EXEC [usp_ExportData_Excel] @dbName = 'Master',

@sql = 'select * from master.sys.sysdatabases',

@fullFileName = 'D:\Table_Details.xls' ,

@InstanceName ='',

@User = '',

@pwd = ''

***/

CREATE PROC [dbo].[usp_ExportData_Excel]

(

@dbName VARCHAR(100) = 'master',

@sql VARCHAR(8000) = 'select * from master.sys.sysdatabases',

@fullFileName VARCHAR(100) = 'D:\Table_Details.xls',

@InstanceName VARCHAR(100) = '',

@User VARCHAR(20) = '',

@Pwd VARCHAR(20) = ''

)

AS

BEGIN

SET NOCOUNT ON

IF @sql = '' or @fullFileName = ''

BEGIN

SELECT 0 AS ReturnValue -- failure

RETURN

END

-- if DB isn't passed in set it to master

SELECT @dbName = 'use ' + @dbName + ';'

IF object_id('##TempExportData') is not null

DROP TABLE ##TempExportData

IF object_id('##TempExportData2') is not null

DROP TABLE ##TempExportData2

-- insert data into a global temp table

DECLARE @columnNames VARCHAR(8000),

@columnConvert VARCHAR(8000),

@tempSQL VARCHAR(8000)

SELECT @tempSQL = left(@sql, charindex('from', @sql)-1) +

' into ##TempExportData ' +

substring(@sql, charindex('from', @sql)-1, len(@sql))

EXEC(@dbName + @tempSQL)

IF @@error > 0

BEGIN

SELECT 0 AS ReturnValue -- failure

RETURN

END

-- build 2 lists

-- 1. column names

-- 2. columns converted to nvarchar

SELECT @columnNames = COALESCE( @columnNames + ',', '') + column_name,

@columnConvert = COALESCE( @columnConvert + ',', '') + 'convert(nvarchar(4000),'

+ column_name + case when data_type in ('datetime', 'smalldatetime') then ',121'

WHEN data_type in ('numeric', 'decimal') then ',128'

WHEN data_type in ('float', 'real', 'money', 'smallmoney') then ',2'

WHEN data_type in ('datetime', 'smalldatetime') then ',120'

ELSE ''

END + ') as ' + column_name

FROM tempdb.INFORMATION_SCHEMA.Columns

WHERE table_name = '##TempExportData'

-- execute select query to insert data and column names into new temp table

SELECT @sql = 'select ' + @columnNames + ' into ##TempExportData2 from

(select ' + @columnConvert + ', ''2'' as [temp##SortID] from ##TempExportData

union all select ''' + replace(@columnNames, ',', ''', ''') + ''', ''1'') t

order by [temp##SortID]'

exec (@sql)

-- BUILD FULL BCP QUERY

DECLARE @bcpCommand VARCHAR(8000)

SET @bcpCommand = 'bcp " SELECT * from ##TempExportData2" queryout'

SET @bcpCommand = @bcpCommand +' '+@fullFileName+' -S'+

@InstanceName+' -c -w -T -U '+@User+' -P '+@pwd+'","-CRAW'

EXEC master..xp_cmdshell @bcpCommand

IF @@ERROR > 0

BEGIN

SELECT 0 AS ReturnValue -- failure

RETURN

END

DROP TABLE ##TempExportData

DROP TABLE ##TempExportData2

SET @columnNames =' '

SET @columnConvert =' '

SET @tempSQL =' '

SELECT 1 as ReturnValue

END