2014-10-15 6 views
5

Ho un database multi-tenant, ogni utente ha il proprio schema.Il modo migliore per eseguire il backup di uno schema specifico?

Qual è il modo migliore per eseguire il backup di un singolo titolare (schema tabella)? Per quanto ne so SQL Server non supporta il backup di un singolo schema (solo il database completo).

Ho bisogno di eseguire il backup della struttura e dei dati. Inoltre deve essere automatizzato (idealmente dovrei essere in grado di chiamarlo anche da SSMS).

Stavo pensando all'esportazione di ddl e dati come istruzioni SQL. Se c'è un modo per chiamare la procedura guidata "Genera e pubblica script" come stored proc, penso che funzionerebbe?

Sono attualmente su Sql Server 2008 R2 ma è possibile eseguire l'aggiornamento.

+4

È possibile inserire tutte le tabelle da uno schema in un singolo filegroup e ripristinarlo? – DavidG

+0

+1 @DavidG ... rendi questa una risposta ... a parte il fatto di saltare un mucchio di intensi schemi di scripting, penso che il tuo commento sia il più vicino a una soluzione pulita, come lo troverai per i backup specifici dello schema su SQL Server. – DCaugs

+0

@DCaugs L'ho arricchito un po 'e ho aggiunto un'altra idea. – DavidG

risposta

3

Un paio di idee.

l'utilizzo di gruppi di file

misi le tavole ogni inquilino ha nel proprio gruppo di file. SQL Server ha la capacità di backup and restore individual file groups. È inoltre possibile eseguire alcune altre operazioni, ad esempio l'assunzione di inquilini indivudual offline, se necessario. Per esempio:

CREATE TABLE tenant1.Table1 
(Column1 INT, Column2, INT) 
ON Tenant1FileGroup 

Visualizzazioni & database separati

Probabilmente non è il modo giusto per andare, ma funzionerà. Avere le tabelle per ogni titolare nel proprio database e farvi riferimento dal database "master" con una vista nello schema del tenant. Per esempio:

Tenant1DB 
    dbo.Table1 
    dbo.Table2 

Tenant2DB 
    dbo.Table1 
    dbo.Table2 

MasterDB 
    tenant1.Table1 
    tenant1.Table2 
    tenant2.Table1 
    tenant2.Table2 

in cui gli oggetti di cui sopra nel database MasterDB sono viste come ad esempio:

CREATE VIEW tenant1.Table1 
AS 
SELECT * FROM Tenant1DB.dbo.Table1 

questo modo si può facilmente il backup/ripristino dei database inquilino individuali. Alcuni altri vantaggi di questa strategia:

  • I singoli titolari possono essere ripristinati senza portare il database principale in modalità utente singolo.
  • Il sistema si ridimensionerà bene in quanto il database del titolare può essere spostato su altri server.
+0

Grazie. Credo che l'uso di gruppi di file dovrebbe essere il modo migliore. Sai se esiste un modo per ripristinare un gruppo di file senza accesso esclusivo al database? –

+0

Suppongo che abbia senso non avere il database disponibile quando si esegue un ripristino. Il problema che sto avendo ora è quello di ripristinare un filegroup in un punto nel tempo precedente (ignorando le modifiche del registro delle transazioni). –

+0

Probabilmente, non sono sicuro (è passato un po 'di tempo da quando ero all'estremità appiccicosa dell'amministratore del database!) Ma se hai bisogno di un database per essere online, la seconda opzione funzionerà sicuramente. In effetti, offre alcuni vantaggi interessanti come il ridimensionamento (i database dei titolari possono essere spostati su altri server) – DavidG

Problemi correlati