How to take SQL server database backup without data?

How to take SQL server database backup without data?

Version: Sql server 2012

There are different method available to achieve this goal. Such as..Script out the source database and then run the script against an empty target database to create all database objects that are in the source database
Right click on the database -> select “tasks” -> “Generate scripts”-> Next -> Select script entire database and all database objects -> Save the sql file in location ->Next-> Next-> Finish.

Now If you want to restore the database just execute  the content of sql file and this will create a new database with only data structure .

This is the content of sql file.

USE [master]

GO

/****** Object:  Database [newdb]    Script Date: 2/3/2017 10:20:17 AM ******/

CREATE DATABASE [newdb]

 CONTAINMENT = NONE

 ON  PRIMARY

( NAME = N’sourcedb’, FILENAME = N’E:\MSSQLSERVER\MSSQL11.MSSQLSERVER\MSSQL\DATA\newdb.mdf’ , SIZE = 3136KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )

 LOG ON

( NAME = N’sourcedb_log’, FILENAME = N’E:\MSSQLSERVER\MSSQL11.MSSQLSERVER\MSSQL\DATA\newdb_log.ldf’ , SIZE = 768KB , MAXSIZE = UNLIMITED, FILEGROWTH = 10%)

GO

ALTER DATABASE [newdb] SET COMPATIBILITY_LEVEL = 110

GO

IF (1 = FULLTEXTSERVICEPROPERTY(‘IsFullTextInstalled’))

begin

EXEC [newdb].[dbo].[sp_fulltext_database] @action = ‘enable’

end

GO

ALTER DATABASE [newdb] SET ANSI_NULL_DEFAULT OFF

GO

ALTER DATABASE [newdb] SET ANSI_NULLS OFF

GO

ALTER DATABASE [newdb] SET ANSI_PADDING OFF

GO

ALTER DATABASE [newdb] SET ANSI_WARNINGS OFF

GO

ALTER DATABASE [newdb] SET ARITHABORT OFF

GO

ALTER DATABASE [newdb] SET AUTO_CLOSE OFF

GO

ALTER DATABASE [newdb] SET AUTO_CREATE_STATISTICS ON

GO

ALTER DATABASE [newdb] SET AUTO_SHRINK OFF

GO

ALTER DATABASE [newdb] SET AUTO_UPDATE_STATISTICS ON

GO

ALTER DATABASE [newdb] SET CURSOR_CLOSE_ON_COMMIT OFF

GO

ALTER DATABASE [newdb] SET CURSOR_DEFAULT  GLOBAL

GO

ALTER DATABASE [newdb] SET CONCAT_NULL_YIELDS_NULL OFF

GO

ALTER DATABASE [newdb] SET NUMERIC_ROUNDABORT OFF

GO

ALTER DATABASE [newdb] SET QUOTED_IDENTIFIER OFF

GO

ALTER DATABASE [newdb] SET RECURSIVE_TRIGGERS OFF

GO

ALTER DATABASE [newdb] SET  DISABLE_BROKER

GO

ALTER DATABASE [newdb] SET AUTO_UPDATE_STATISTICS_ASYNC OFF

GO

ALTER DATABASE [newdb] SET DATE_CORRELATION_OPTIMIZATION OFF

GO

ALTER DATABASE [newdb] SET TRUSTWORTHY OFF

GO

ALTER DATABASE [newdb] SET ALLOW_SNAPSHOT_ISOLATION OFF

GO

ALTER DATABASE [newdb] SET PARAMETERIZATION SIMPLE

GO

ALTER DATABASE [newdb] SET READ_COMMITTED_SNAPSHOT OFF

GO

ALTER DATABASE [newdb] SET HONOR_BROKER_PRIORITY OFF

GO

ALTER DATABASE [newdb] SET RECOVERY FULL

GO

ALTER DATABASE [newdb] SET  MULTI_USER

GO

ALTER DATABASE [newdb] SET PAGE_VERIFY CHECKSUM 

GO

ALTER DATABASE [newdb] SET DB_CHAINING OFF

GO

ALTER DATABASE [newdb] SET FILESTREAM( NON_TRANSACTED_ACCESS = OFF )

GO

ALTER DATABASE [newdb] SET TARGET_RECOVERY_TIME = 0 SECONDS

GO

EXEC sys.sp_db_vardecimal_storage_format N’newdb’, N’ON’

GO

USE [newdb]

GO

/****** Object:  User [test1]    Script Date: 2/3/2017 10:20:17 AM ******/

CREATE USER [test1] FOR LOGIN [test1] WITH DEFAULT_SCHEMA=[dbo]

GO

/****** Object:  User [som]    Script Date: 2/3/2017 10:20:17 AM ******/

CREATE USER [som] FOR LOGIN [som] WITH DEFAULT_SCHEMA=[dbo]

GO

/****** Object:  User [readonly]    Script Date: 2/3/2017 10:20:17 AM ******/

CREATE USER [readonly] FOR LOGIN [readonly] WITH DEFAULT_SCHEMA=[db_datareader]

GO

ALTER ROLE [db_owner] ADD MEMBER [test1]

GO

ALTER ROLE [db_owner] ADD MEMBER [som]

GO

ALTER ROLE [db_datareader] ADD MEMBER [readonly]

GO

/****** Object:  Table [dbo].[Employee]    Script Date: 2/3/2017 10:20:17 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[Employee](

            [ID] [int] NULL,

            [Value] [varchar](10) NULL

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

/****** Object:  Table [dbo].[t1]    Script Date: 2/3/2017 10:20:17 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[t1](

            [id] [varchar](255) NULL

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

/****** Object:  Table [dbo].[t2]    Script Date: 2/3/2017 10:20:17 AM ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_PADDING ON

GO

CREATE TABLE [dbo].[t2](

            [id] [varchar](255) NULL

) ON [PRIMARY]

GO

SET ANSI_PADDING OFF

GO

USE [master]

GO

ALTER DATABASE [newdb] SET  READ_WRITE

GO

Incase if you want to restore the database with different name then we would require to modify the sql file with the new database name .

 Another method is: Backup the source database and restore to the destination database and then delete all table data.

Now we will show you another method which also serve our purpose.

Backup the database without data.

In the SSMS Object Explorer Window, right click on the “newdb” database and choose “Tasks” > “Extract Data-tier Application…”

The [Extract Data-tier Application] wizard will start. 

Provide the DAC package file location 

click “Next”

click “Next”

Now we have newdb.dacpac file generated.

Restore a SQL Server Database from a DAC package

The DAC package can be restored to a target SQL Server instance whose version is equal to or higher than that of the source SQL Server instance.

 SSMS Window, right click [Databases] , and choose “Deploy Data-tier Application…”, as shown below

The [Deploy Data-tier Application] wizard will start, Click next in the first [Introduction] screen, and in the [Select Package] screen, click the Browse button to find the DAC package file location

The [Deploy Data-tier Application] wizard will start, Click next and Browse button to find the DAC package file location.

Click Next, and in the [Update Configuration] screen, input the required destination database name or leave it as if you don’t want to change the db name.

That’s it. We have successfully restored the database with only data structure.


Categories

Leave a Reply

Your email address will not be published. Required fields are marked *