-- 1. -- Creating a database with SIMPLE recovery model USE master; GO IF EXISTS (SELECT * FROM sys.databases WHERE name = 'Database_SimpleRecovery') DROP DATABASE Database_SimpleRecovery GO CREATE DATABASE [Database_SimpleRecovery] CONTAINMENT = NONE ON PRIMARY ( NAME = N'Database_SimpleRecovery', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA\Database_SimpleRecovery.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'Database_SimpleRecovery_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA\Database_SimpleRecovery_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) GO ALTER DATABASE [Database_SimpleRecovery] SET RECOVERY SIMPLE GO -- 2. -- Creating a database with FULL recovery model USE master; GO IF EXISTS (SELECT * FROM sys.databases WHERE name = 'Database_FullRecovery') DROP DATABASE Database_FullRecovery GO CREATE DATABASE [Database_FullRecovery] CONTAINMENT = NONE ON PRIMARY ( NAME = N'Database_FullRecovery', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA\Database_FullRecovery.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'Database_FullRecovery_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA\Database_FullRecovery_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) GO ALTER DATABASE Database_FullRecovery SET RECOVERY FULL GO
Let's add some records to these two databases and check the space used by log files.
-- Adding some transactions to Database_SimpleRecovery USE Database_SimpleRecovery; GO SELECT * INTO dbo.TestTable FROM AdventureWorksDW2014.dbo.FactInternetSales2; -- Checking for freespace in the log SELECT DB_NAME() AS DatabaseName, name AS FileName, size/128.0 AS CurrentSizeMB, size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS FreeSpaceMB FROM sys.database_files; -- Adding some transactions to Database_FullRecovery USE Database_FullRecovery; GO SELECT * INTO dbo.TestTable FROM AdventureWorksDW2014.dbo.FactInternetSales2; -- Checking for freespace in the log SELECT DB_NAME() AS DatabaseName, name AS FileName, size/128.0 AS CurrentSizeMB, size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS FreeSpaceMB FROM sys.database_files;
- Full database backup has never been taken.
- Full or differential backup has never been taken after switching from SIMPLE to FULL recovery model.
-- Connecting with Database_FullRecovery USE Database_FullRecovery; GO -- Dropping table DROP TABLE dbo.TestTable; GO -- Taking full backup BACKUP DATABASE Database_FullRecovery TO DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\Backup\Database_FullRecovery.bak'; GO -- Loading data again SELECT * INTO dbo.TestTable FROM AdventureWorksDW2014.dbo.FactInternetSales2; -- Checking for freespace in the log SELECT DB_NAME() AS DatabaseName, name AS FileName, size/128.0 AS CurrentSizeMB, size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS FreeSpaceMB FROM sys.database_files;
SELECT * FROM sys.database_recovery_status WHERE database_id = DB_ID();