-- You can attach a database to the server just with mdf even though you dont have ldf.
USE [master] GO
EXEC sp_attach_single_file_db @dbname='AdventureWorksDW2012',
@physname=N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW2012_Data.mdf'
GO
-- You can also use the following method..
USE [master] GO
CREATE DATABASE AdventureWorksDW2012_New ON
(FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW2012_New_Data.mdf')
FOR ATTACH_REBUILD_LOG
GO
-- You can also use the following method.
USE [master] GO
CREATE DATABASE AdventureWorksDW2012_New1 ON
( FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\DATA\AdventureWorksDW2012_New1_Data.mdf')
FOR ATTACH
GO
In all the above cases the ldf file created by itself in default log files folder.
Nothing loose by learning again. Definitely gain If you just don't let it go away. - Bvsc.
Thursday, January 12, 2017
Friday, June 5, 2015
SQL server error during the installation: Unhandled Exception.. System ConfigurationException
Its frustrating sometimes when more issues coming during your SQL server installation.
I have been told to installation SQL server on a machine. As I don't have proper permissions I had to try couple of times install/ uninstall the SQL server on the same machine...
Finally, I got the permissions and thought it will go smooth from now. But suddenly I got the following error during my next try...

Solution:
If your operating system is Windows 8, 7, Vista:
C:\Users\[USERNAME]\AppData\Local\Microsoft_Corporation\LandingPage.exe_StrongName_ryspccglaxmt4nhllj5z3thycltsvyyx\10.0.0.0
If Windows XP:
C:\Documents and Settings\[USERNAME]\local settings\application data\Microsoft_Corporation\LandingPage.exe_StrongName_ryspccglaxmt4nhllj5z3thycltsvyyx\10.0.0.0
drive to that folder and Rename the file "user.config" to "user.config.bak" (no quotes).
Reason: Every time you try the install SQL, it try to create 'user.config' file in the above folder(vary from OS to OS). During your last uninstall SQL it didn't clean up properly from the folder...
So as it tries to create every time during the installation, it tried creating the file and rejected as the file already exists in the folder.. So please rename it.
I have been told to installation SQL server on a machine. As I don't have proper permissions I had to try couple of times install/ uninstall the SQL server on the same machine...
Finally, I got the permissions and thought it will go smooth from now. But suddenly I got the following error during my next try...
Solution:
If your operating system is Windows 8, 7, Vista:
C:\Users\[USERNAME]\AppData\Local\Microsoft_Corporation\LandingPage.exe_StrongName_ryspccglaxmt4nhllj5z3thycltsvyyx\10.0.0.0
If Windows XP:
C:\Documents and Settings\[USERNAME]\local settings\application data\Microsoft_Corporation\LandingPage.exe_StrongName_ryspccglaxmt4nhllj5z3thycltsvyyx\10.0.0.0
drive to that folder and Rename the file "user.config" to "user.config.bak" (no quotes).
Reason: Every time you try the install SQL, it try to create 'user.config' file in the above folder(vary from OS to OS). During your last uninstall SQL it didn't clean up properly from the folder...
So as it tries to create every time during the installation, it tried creating the file and rejected as the file already exists in the folder.. So please rename it.
Thursday, May 14, 2015
Delete Selected list of tables from the SQL database
I have selected tables list which I need to delete from my database. If 10 or less I can do it manually in different ways.
But it has more than 1000 tables which required to delete from the database.
Of course people has their own choice to do this. I have implemented the following script.
First you have to send that list of table names into a temp table.
You may give the Serial number for each row..You can done this by adding extra column with identity property (OR) use
Row_Number() function on the existed column.
Once you are ready with a table with the list of table names(I named it AA_DeletedTables) You can follow the script below.
DECLARE @TableName VARCHAR(50)
DECLARE @SQL VARCHAR(100)
DECLARE @i INT =1
DECLARE @Count INT
SELECT @Count = COUNT(*) FROM AA_DeleatedTables
WHILE (@i < = @Count)
BEGIN
SELECT @TableName = name from AA_DeleatedTables WHERE Sno = @i
SET @SQL = 'Drop table '+@TableName
--PRINT (@SQL) You can test by enabling this by just printing the test
EXEC @SQL
SET @i = @i +1
END
--SELECT * FROM AA_DeleatedTables
Drop table AA_DeleatedTables
NOTE: It will work for when the tables doesn't have any constraints referencing..
If you want you can use this table as audit table by adding time stamp columns....
Wednesday, April 8, 2015
Deleting Old backup files from the file system by using SQL script
Some times you may frustrate to use maintenance plans. Some times complete work by using T-SQL scripts is better(I usually go for the scripts) than maintenance plans.
If you want to delete the backup files from the filesystem, You can do by using T-SQL script.
Please follow the below script and pass the parameters accordingly your server/system.
DECLARE @DeletedDate DATETIME
SET @DeletedDate = DateAdd(day, -15, GetDate()) -- Its your setting the number of days
EXECUTE master.sys.xp_delete_file
0, -- FileTypeSelected (0 = FileBackup, 1 = FileReport)
N'E:\FullBackup\', -- folder path (trailing slash)
N'bak', -- file extension which needs to be deleted (no dot)
@DeletedDate, -- date prior which to delete
1 -- subfolder flag (1 = include files in first subfolder level, 0 = not)
If you want to delete the backup files from the filesystem, You can do by using T-SQL script.
Please follow the below script and pass the parameters accordingly your server/system.
DECLARE @DeletedDate DATETIME
SET @DeletedDate = DateAdd(day, -15, GetDate()) -- Its your setting the number of days
EXECUTE master.sys.xp_delete_file
0, -- FileTypeSelected (0 = FileBackup, 1 = FileReport)
N'E:\FullBackup\', -- folder path (trailing slash)
N'bak', -- file extension which needs to be deleted (no dot)
@DeletedDate, -- date prior which to delete
1 -- subfolder flag (1 = include files in first subfolder level, 0 = not)
Tuesday, April 7, 2015
Jobs running on the SQL server and get the next run
List of the jobs and when and what time they execute for the next time...
You can use the following script to find that information....
SELECT sj.name AS Name,sjs.next_run_date AS NextRunDate,LEFT(RIGHT('000000' + CAST(sjs.next_run_time AS VARCHAR(6)), 6),2)
+ ':' + SUBSTRING(RIGHT('000000'+ CAST(sjs.next_run_time AS VARCHAR(6)),6), 3, 2)
+ ':' + RIGHT(RIGHT('000000' + CAST(sjs.next_run_time AS VARCHAR(6)),6), 2) AS NextRunTime,
sj.date_created AS DateCreated, sj.date_modified AS DateModified,sj.description AS Description
FROM msdb..sysjobschedules sjs JOIN
msdb..sysjobs sj on sjs.job_id = sj.job_id
--WHERE description not like '%This job is owned by a report%'
ORDER BY 3 --Name
You can use the following script to find that information....
SELECT sj.name AS Name,sjs.next_run_date AS NextRunDate,LEFT(RIGHT('000000' + CAST(sjs.next_run_time AS VARCHAR(6)), 6),2)
+ ':' + SUBSTRING(RIGHT('000000'+ CAST(sjs.next_run_time AS VARCHAR(6)),6), 3, 2)
+ ':' + RIGHT(RIGHT('000000' + CAST(sjs.next_run_time AS VARCHAR(6)),6), 2) AS NextRunTime,
sj.date_created AS DateCreated, sj.date_modified AS DateModified,sj.description AS Description
FROM msdb..sysjobschedules sjs JOIN
msdb..sysjobs sj on sjs.job_id = sj.job_id
--WHERE description not like '%This job is owned by a report%'
ORDER BY 3 --Name
Monday, April 6, 2015
History of backups for the selected database
If you want to see the backup history of the selected database or history for all of the databases.
Please use the following script.
SELECT
b.database_name,
m.physical_device_name AS 'Location_Of_Backups',
CAST(CAST(b.backup_size / 1000000 AS INT) AS VARCHAR(14)) AS 'BackupSize_In_MBs',
CAST(DATEDIFF(second, b.backup_start_date, b.backup_finish_date) AS VARCHAR(4)) AS 'Duration_In_Secs',
b.backup_start_date AS'Stareted',
b.backup_finish_date AS'Finished',
CAST(b.first_lsn AS VARCHAR(50)) AS 'First_LSN',
CAST(b.last_lsn AS VARCHAR(50)) AS 'Last_LSN',
CASE b.[type]
WHEN 'D' THEN 'Full Backup'
WHEN 'I' THEN 'Differential Backup'
WHEN 'L' THEN 'Transaction Log Backup'
END AS BackupType,
b.server_name,
b.recovery_model
FROM msdb.dbo.backupset b
INNER JOIN msdb.dbo.backupmediafamily m ON b.media_set_id = m.media_set_id
WHERE b.database_name = DB_NAME() -- For the current database
ORDER BY backup_start_date DESC, backup_finish_date
GO
--
Please use the following script.
SELECT
b.database_name,
m.physical_device_name AS 'Location_Of_Backups',
CAST(CAST(b.backup_size / 1000000 AS INT) AS VARCHAR(14)) AS 'BackupSize_In_MBs',
CAST(DATEDIFF(second, b.backup_start_date, b.backup_finish_date) AS VARCHAR(4)) AS 'Duration_In_Secs',
b.backup_start_date AS'Stareted',
b.backup_finish_date AS'Finished',
CAST(b.first_lsn AS VARCHAR(50)) AS 'First_LSN',
CAST(b.last_lsn AS VARCHAR(50)) AS 'Last_LSN',
CASE b.[type]
WHEN 'D' THEN 'Full Backup'
WHEN 'I' THEN 'Differential Backup'
WHEN 'L' THEN 'Transaction Log Backup'
END AS BackupType,
b.server_name,
b.recovery_model
FROM msdb.dbo.backupset b
INNER JOIN msdb.dbo.backupmediafamily m ON b.media_set_id = m.media_set_id
WHERE b.database_name = DB_NAME() -- For the current database
ORDER BY backup_start_date DESC, backup_finish_date
GO
--
Thursday, April 2, 2015
Full and Differential Backups in a fashion
One day, I got a requirement for the new server backup strategy.. Of course I have done this before but didn't carry the scripts with me as I always feels I can implement on the fly..
But this time I just want to save this script and may useful for others.
Requirement :
Full backup has to run every 'SUNDAY' and Differentials should have to run every day.
Everything in the same script...
The reason why I did both in the same script is to not fail the job on any weekday as the existing database refreshed or new database created.
Reason to fail: As the 'new database' / 'refreshed' haven't had the Full backup yet, The direct diff. backups would be fails.
So, this script will check for the full backup on every day for every database.
DECLARE @DBName VARCHAR(40)
DECLARE @SQL VARCHAR(max)
DECLARE DataBaseName CURSOR FOR
SELECT s.name FROM sys.databases s where s.database_Id > 4
--s.name IN ('MyDB1','MyDB2') -- You can name your own databases here
OPEN DataBaseName
FETCH NEXT FROM DataBaseName
INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @BackName VARCHAR(50) = @DBName +'_'+REPLACE(CONVERT(VARCHAR(10),GETDATE(),101),'/','') -- I want this format MyDB1_MMDDYYYY
DECLARE @BackPath VARCHAR(500)
IF (DATENAME (DW,GETDATE()) = 'SUNDAY'
OR -- Will check whether the full backup happend at all on the database
(SELECT ISNULL(STR(ABS(DATEDIFF(day, GetDate(),MAX(Backup_finish_date)))), 'NEVER') as DaysSinceLastBackup
FROM master.dbo.sysdatabases B LEFT OUTER JOIN msdb.dbo.backupset A
ON A.database_name = B.name AND A.type = 'D'
WHERE B.name = @DBName
) = 'NEVER'
)
BEGIN
SET @BackPath = 'E:\FullBackup\'+ @BackName
SET @SQL = 'BACKUP DATABASE ['+@DBName+'] TO DISK = N'''+@BackPath+'.bak'' WITH NOFORMAT, NOINIT, NAME = N'''+@DBName+'-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'''+@DBName+''' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'''+@DBName+''' )
if @backupSetId is null begin raiserror(N''Verify failed. Backup information for database '''''+@DBName+''''' not found.'', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'''+@BackPath+'.bak'' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND'
EXEC (@SQL)
END
ELSE
BEGIN
--If(DB <> FullBackup)
-- take full backup
SET @BackPath = 'E:\DifferentialBackup\'+ @BackName
SET @SQL = 'BACKUP DATABASE ['+@DBName+'] TO DISK = N'''+@BackPath+'_Diff.Bak'' WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'''+@DBName+'-Differential Database Backup'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'''+@DBName+''' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'''+@DBName+''' )
if @backupSetId is null begin raiserror(N''Verify failed. Backup information for database '''''+@DBName+''''' not found.'', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'''+@BackPath+'_Diff.Bak'' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND'
EXEC (@SQL)
END
FETCH NEXT FROM DataBaseName INTO @DBName
END
CLOSE DataBaseName;
DEALLOCATE DataBaseName;
GO
Now, the real problem is space.... The backups keep on going We are not overwriting / Deleting yet.. So, the below script may useful for the automation. Otherwise you have do delete the files manually...
You can attach the following script with the above script..
IF (DATENAME (DW,GETDATE()) = 'SUNDAY' )
BEGIN
--Only sunday We can delete the old FullBackup files...
DECLARE @DeleteDateFull DATETIME
SET @DeleteDateFull = DateAdd(day, -15, GetDate()) -- Its your setting the number of days
EXECUTE master.sys.xp_delete_file
0, -- FileTypeSelected (0 = FileBackup, 1 = FileReport)
N'E:\FullBackup\', -- folder path (trailing slash)
N'bak', -- file extension which needs to be deleted (no dot)
@DeleteDateFull, -- date prior which to delete
1 -- subfolder flag (1 = include files in first subfolder level, 0 = not)
--Only sunday We can delete the old Differential backup files...
DECLARE @DeleteDateDiff DATETIME
SET @DeleteDateDiff = DateAdd(day, -15, GetDate()) -- Its your setting the number of days
EXECUTE master.sys.xp_delete_file
0, -- FileTypeSelected (0 = FileBackup, 1 = FileReport)
N'E:\DifferentialBackup\', -- folder path (trailing slash)
N'bak', -- file extension which needs to be deleted (no dot)
@DeleteDateDiff, -- date prior which to delete
1 -- subfolder flag (1 = include files in first subfolder level, 0 = not)
END
But this time I just want to save this script and may useful for others.
Requirement :
Full backup has to run every 'SUNDAY' and Differentials should have to run every day.
Everything in the same script...
The reason why I did both in the same script is to not fail the job on any weekday as the existing database refreshed or new database created.
Reason to fail: As the 'new database' / 'refreshed' haven't had the Full backup yet, The direct diff. backups would be fails.
So, this script will check for the full backup on every day for every database.
DECLARE @DBName VARCHAR(40)
DECLARE @SQL VARCHAR(max)
DECLARE DataBaseName CURSOR FOR
SELECT s.name FROM sys.databases s where s.database_Id > 4
--s.name IN ('MyDB1','MyDB2') -- You can name your own databases here
OPEN DataBaseName
FETCH NEXT FROM DataBaseName
INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
DECLARE @BackName VARCHAR(50) = @DBName +'_'+REPLACE(CONVERT(VARCHAR(10),GETDATE(),101),'/','') -- I want this format MyDB1_MMDDYYYY
DECLARE @BackPath VARCHAR(500)
IF (DATENAME (DW,GETDATE()) = 'SUNDAY'
OR -- Will check whether the full backup happend at all on the database
(SELECT ISNULL(STR(ABS(DATEDIFF(day, GetDate(),MAX(Backup_finish_date)))), 'NEVER') as DaysSinceLastBackup
FROM master.dbo.sysdatabases B LEFT OUTER JOIN msdb.dbo.backupset A
ON A.database_name = B.name AND A.type = 'D'
WHERE B.name = @DBName
) = 'NEVER'
)
BEGIN
SET @BackPath = 'E:\FullBackup\'+ @BackName
SET @SQL = 'BACKUP DATABASE ['+@DBName+'] TO DISK = N'''+@BackPath+'.bak'' WITH NOFORMAT, NOINIT, NAME = N'''+@DBName+'-Full Database Backup'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'''+@DBName+''' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'''+@DBName+''' )
if @backupSetId is null begin raiserror(N''Verify failed. Backup information for database '''''+@DBName+''''' not found.'', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'''+@BackPath+'.bak'' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND'
EXEC (@SQL)
END
ELSE
BEGIN
--If(DB <> FullBackup)
-- take full backup
SET @BackPath = 'E:\DifferentialBackup\'+ @BackName
SET @SQL = 'BACKUP DATABASE ['+@DBName+'] TO DISK = N'''+@BackPath+'_Diff.Bak'' WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'''+@DBName+'-Differential Database Backup'', SKIP, NOREWIND, NOUNLOAD, COMPRESSION, STATS = 10
declare @backupSetId as int
select @backupSetId = position from msdb..backupset where database_name=N'''+@DBName+''' and backup_set_id=(select max(backup_set_id) from msdb..backupset where database_name=N'''+@DBName+''' )
if @backupSetId is null begin raiserror(N''Verify failed. Backup information for database '''''+@DBName+''''' not found.'', 16, 1) end
RESTORE VERIFYONLY FROM DISK = N'''+@BackPath+'_Diff.Bak'' WITH FILE = @backupSetId, NOUNLOAD, NOREWIND'
EXEC (@SQL)
END
FETCH NEXT FROM DataBaseName INTO @DBName
END
CLOSE DataBaseName;
DEALLOCATE DataBaseName;
GO
Now, the real problem is space.... The backups keep on going We are not overwriting / Deleting yet.. So, the below script may useful for the automation. Otherwise you have do delete the files manually...
You can attach the following script with the above script..
IF (DATENAME (DW,GETDATE()) = 'SUNDAY' )
BEGIN
--Only sunday We can delete the old FullBackup files...
DECLARE @DeleteDateFull DATETIME
SET @DeleteDateFull = DateAdd(day, -15, GetDate()) -- Its your setting the number of days
EXECUTE master.sys.xp_delete_file
0, -- FileTypeSelected (0 = FileBackup, 1 = FileReport)
N'E:\FullBackup\', -- folder path (trailing slash)
N'bak', -- file extension which needs to be deleted (no dot)
@DeleteDateFull, -- date prior which to delete
1 -- subfolder flag (1 = include files in first subfolder level, 0 = not)
--Only sunday We can delete the old Differential backup files...
DECLARE @DeleteDateDiff DATETIME
SET @DeleteDateDiff = DateAdd(day, -15, GetDate()) -- Its your setting the number of days
EXECUTE master.sys.xp_delete_file
0, -- FileTypeSelected (0 = FileBackup, 1 = FileReport)
N'E:\DifferentialBackup\', -- folder path (trailing slash)
N'bak', -- file extension which needs to be deleted (no dot)
@DeleteDateDiff, -- date prior which to delete
1 -- subfolder flag (1 = include files in first subfolder level, 0 = not)
END
Subscribe to:
Posts (Atom)