Let’s say I have a database like this:
Users
-----
ID int PK Identity
Name vchar(max)
Sales
-----
UserID int FK
Description vchar(max)
And some data:
Users
1, "Daniel"
2, "Barnie"
3, "Frank"
Sales
2, "New computer"
2, "Rubber duck"
3, "Cabbage"
There are also several other tables that link to this primary key. Now there is a requirement that only certain users want to be backed up, for example I only want to export the data and all the linked data for users 2 and 3.
Questions:
1) Is there a way to create a .bak file using only partial data? I don’t want to backup the whole thing, just selected records.
2) If .bak files are not the best way, what else can be done? I have thought of generating a csv file or an INSERT sql script but these leads to problems in the import feature. The problem comes about when you have exported from two or more databases and you now have potential clashes in the primary key for the users table. How do you get around this? I am also using filestreaming in some tables so I have some data that cannot be pulled out into text format easily.
I’d also like to do all this programatically. Using sql server 2008.
No. In SQL Server, the backup functionality will only backup an entire database.
I’d recommend setting up a second archive database on the same server as the original and use replication to sync only certain records. I would then only backup the archive database (or both but on different schedules).
If replication isn’t your flavor of vodka, then you could even do a triggered upsert or delete into this archive database.
Is this a multi-tenant situation? Regardless, for each database I would create a second archive database that would be used to backup the information that was actually needed. Thus, no two databases would feed into the same filtered archive database.