DBA Connect
Technology Overloaded
Thursday, November 10, 2011
SQL Server Installation error !
| Reactions: |
Saturday, November 5, 2011
SQL SERVER ARCHITECTURE
| Reactions: |
Thursday, November 3, 2011
Realtime Example for SSIS Transformations
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
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
| Reactions: |
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
| Reactions: |