Jude Nanayakkara
Jude Nanayakkara

Reputation: 281

MSSQL DataBase Backup without a specific table

I need to take a schedule backup without a specific table in sql. Because if I take a backup with that table it will take long time. I need to exclude one table from backup. Is it possible? Without that table all tables and data should be there in the database.

Upvotes: 27

Views: 23925

Answers (2)

Zanon
Zanon

Reputation: 30810

Mike's answer is almost correct, except that you don't need to create another table to move the data.

According to this answer, which I tested myself, after creating a filegroup, you just need to move the clustered index to the other filegroup. If you don't have a clustered index, you can create one just to help you in this process. If you also have nonclustered indexes, move them too. After you finish, all data will have been moved between filegroups automatically.

So, if you want to exclude this big table from your backup routine, do the following:

  1. Create a new file group.

    USE [master]  
    ALTER DATABASE [MyDatabase] ADD FILEGROUP [FG_MYBIGTABLE]
    
  2. Add a new file to this file group.

    ALTER DATABASE [MyDatabase]
    ADD FILE
    (
        name = MyDatabase_MyBigTable,
        filename = 'C:\DB_Files\MyDatabase_MyBigTable.ndf',
        size = 1024MB,
        maxsize = unlimited,
        filegrowth = 100MB
    ) 
    TO FILEGROUP FG_MYBIGTABLE
    
  3. Move the clustered index by creating another with DROP_EXISTING the old one.

    CREATE UNIQUE CLUSTERED INDEX CIX_MyBigTable
    ON MyDatabase.dbo.MyBigTable (ID)
    WITH DROP_EXISTING, ONLINE
    ON FG_MYBIGTABLE
    
  4. Move the other indexes.

    CREATE NONCLUSTERED INDEX [IX_OtherTable] 
    ON MyDatabase.dbo.MyBigTable (OtherTable_ID)
    WITH DROP_EXISTING, ONLINE
    ON FG_MYBIGTABLE
    
  5. Backup the database referencing the PRIMARY file group.

    BACKUP DATABASE MyDatabase
    FILEGROUP = 'PRIMARY',
    TO DISK = 'C:\Backups\MyBackup.bak'
    

Upvotes: 12

Mike Zalansky
Mike Zalansky

Reputation: 796

You can setup a separate file group for this one table, apart from the PRIMARY file group. This will give you the ability to create a backup that omits your large table. Below is an example that steps out the process.

1) Create a new file group for your database.

USE [master]
GO
ALTER DATABASE [EXAMPLEDB] ADD FILEGROUP [EXAMPLEFG1]
GO

2) Create an identical table with a slightly different name on the new file group.

CREATE TABLE [dbo].[example]
(
    [e] [int] NOT NULL
)
ON [EXAMPLEFG1]

GO

3) Insert records from original table into new table.

4) Delete the old table and correct the name of the new table to match the name of the old table.

5) Backup PRIMARY which now excludes the table that is now on file group "EXAMPLEFG1".

BACKUP DATABASE EXAMPLE
   FILEGROUP = 'PRIMARY',
   TO DISK = '<Your Directory>'
GO

If you decide to do a backup of EXAMPLEFG1 simply change the FILEGROUP value to "EXAMPLEFG1" in the above query.

Check out this Microsoft site for more info on filegroup backups.

Hope this helps!

Upvotes: 25

Related Questions