Questione : scritto di restauro stato necessario per il appoggio

Ciao, il
I che prova a fornire uno scritto che ristabilisce “l'ultimo„ sostegno alle basi di dati standby ma qui è il mio dilemma….il programma di sostegno del

Our è come segue: i sostegni due volte al giorno differenziali completi del backups

These del ceppo di transazione del backups
hourly del backups
del

nightly sono spinti sopra verso gli assistenti standby nella necessità differente del folders

I di automatizzare il processo di individuazione dei sostegni giusti…. e ristabilendo il

Can della base di dati (in pieno, differenziale, ceppi di transazione) qualcuno mi fornisce la a una mascherina che può fare tutto il questa che ho non potuto trovare di che cosa ho bisogno in linea. Thanks.



class= del

Risposta : scritto di restauro stato necessario per il appoggio

Se non ottenete nulla migliore, questo proc è vicino.  Ristabilisce il sostegno più recente ed allora ristabilisce i ceppi successivi.  Non facciamo i differenziali, in modo da non li tratta.   Alcuni percorsi sono hard-coded, ci sono presupposti circa i nomi logici della base di dati e presumono che le lime di sostegno siano chiamate con la disposizione generata dai programmi di manutenzione di sql.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
ALTERARE LA PROCEDURA [dbo]. [p_RestoreBackupDirForNightlyLoad]

  @i_sDevDbType        varchar (8),
  @i_sLogPathAppName   varchar (40)

AS
COMINCIARE

DICHIARARE
   punta       del @bValidDevDbType,
   punta  del @bValidLogPathAppName,
   @sErrorMessage         varchar (250)

REGOLARE il @bValidDevDbType = 0
SELEZIONARE il @bValidDevDbType = 1
 DOVE @i_sDevDbType DENTRO (“modificato di notte„, “")
 
SE @bValidDevDbType = 0
   COMINCIARE
    REGOLARE il @sErrorMessage = il @i_sDevDbType + “- immettere il parametro non valido.  Deve uguagliare “modificato “di notte„„ o„
	ERRORE DI AVANZAMENTO
   ESTREMITÀ
;

REGOLARE il @bValidLogPathAppName = 0
SELEZIONARE il @bValidLogPathAppName = 1
 In DOVE @i_sLogPathAppName (vari nomi di base di dati qui)
 
SE @bValidLogPathAppName = 0
   COMINCIARE
    REGOLARE il @sErrorMessage = il @i_sLogPathAppName + “- immettere il parametro non valido.„
	ERRORE DI AVANZAMENTO
   ESTREMITÀ
;

DICHIARARE
   @sLogFullPath         varchar (100),
   @sBackupFileList      varchar (100),

   @iBAKFileNameStartPos int,

   @iCmdReturnCode       int,
   @sCommand             varchar (150),
   @sBAKFile_MaxTS       varchar (12),
   varchar          @sDirBAKFile (100),
   varchar          @sDirTRNFile (100)


DICHIARARE 
   @LockResult           int;

tempo del *** della stampa “prima che la RICHIESTA della SERRATURA sia„ + CONVERTITO (varchar (25), getdate (), 121);
    @LockResult di EXEC = @Resource dello sp_getapplock = “tempdb. .tables„, 
									 @LockMode = “esclusiva„,
									 @LockOwner = “sessione„,
									 @LockTimeout  = 3600000;

se >= 0 del @LockResult 
   cominciare
     stampare “la SERRATURA del *** assegnata a„ + CONVERTITO (varchar (25), getdate (), 121);
   estremità
altrimenti
   cominciare
     stampare “la SERRATURA non riuscita, tempo del *** è„ + CONVERTITO (varchar (25), getdate (), 121);
   estremità
;


    SE OBJECT_ID (N'U') di N'tempdb. .CmdDirContents_t', NON È NULLO 
        Tempdb. .CmdDirContents_t della TABELLA di GOCCIA;


    GENERARE il tempdb. .CmdDirContents_t della TABELLA 
    (
     POSIZIONI DI SEGNALE MINIMO       varchar di DirList (100  )
     );


    SE OBJECT_ID (N'U') di N'tempdb. .CmdDirAndTS_t', NON È NULLO 
        Tempdb. .CmdDirAndTS_t della TABELLA di GOCCIA;


    GENERARE il tempdb. .CmdDirAndTS_t della TABELLA 
    (
     POSIZIONE DI SEGNALE MINIMO       varchar di DirList (100  ) NON,
     POSIZIONE DI SEGNALE MINIMO     varchar di Backup_TS (12   ) NON     
     );


    REGOLARE il @sLogFullPath = “K:\BackMeUp\User\„
                      + @i_sLogPathAppName
                      + “\„;
    il percorso  di LogFullPath della stampa “a sostegno è„ + IsNull (@sLogFullPath, '')

    REGOLARE il @sBackupFileList = il @sLogFullPath + “BackupFileList.txt„
    REGOLARE il @sCommand = “del„ + @sBackupFileList;

    @iCmdReturnCode del exec = @sCommand del xp_cmdshell
    REGOLARE il @sCommand = “dir„ + @sLogFullPath + “>„ + @sBackupFileList
    @iCmdReturnCode del exec = @sCommand del xp_cmdshell
    la stampa  “BackupFileList è individuata a„ + IsNull (@sBackupFileList, '')
    

DICHIARARE
   @sSqlStmt   nvarchar (250)

        REGOLARE il @sSqlStmt = 
            Tempdb. .CmdDirContents_t dell'INSERTO di N'BULK '+ 
            N'FROM “+ QUOTENAME (@SBACKUPFILELIST)  + N„ '+ 
            N'WITH '+ 
               N'(FIELDTERMINATOR = '' \ t '', '+ 
               N'FIRSTROW = 1, '+ 
               N'KEEPNULLS, '+
               N'ROWTERMINATOR = '' \ n '') ';

        @sSqlStmt dello sp_executesql di EXEC;

        SE @@ERROR = 0
           Stampare “il riuscito inserto in tempdb. .CmdDirContents_t„


    CANCELLAZIONE 
      Da tempdb. .CmdDirContents_t
     DOVE DirList È NULLO;

    CANCELLAZIONE 
      Da tempdb. .CmdDirContents_t
     DOVE DirList NON GRADICE “%_backup_%.bak„
       E DirList NON GRADICE “%_backup_%.trn„;

    INSERIRE il tempdb. .CmdDirAndTS_t
    SELEZIONARE DirList,
           Backup_TS = ANDATO (DI DESTRA (DirList, 16), 12)
      Da tempdb. .CmdDirContents_t;

   SELEZIONARE * a partire da tempdb. .CmdDirAndTS_t;

   SELEZIONARE il @sBAKFile_MaxTS = il mxbk. Backup_TS
     DA (SELEZIONARE IL PRINCIPALE 1
                  *
             Da tempdb. .CmdDirAndTS_t
            DOVE DirList GRADICE “%_backup_%.bak„
            ORDINE DA 2 DESC
           ) mxbk;

   stampa ''
   il timestamp della stampa “della lima di sostegno scelto è„ + IsNull (@sBAKFile_MaxTS, '');

   SELEZIONARE i @iBAKFileNameStartPos = PATINDEX (“%„ + @i_sLogPathAppName + “_b„ + “%„, DirList)
     Da tempdb. .CmdDirAndTS_t
    DOVE DirList GRADICE “%_backup_%.bak„
      E Backup_TS = @sBAKFile_MaxTS;


   SELEZIONARE @sDirBAKFile = @sLogFullPath + SOTTOSTRINGA (DirList, @iBAKFileNameStartPos, LEN (DirList))
     Da tempdb. .CmdDirAndTS_t
    DOVE DirList GRADICE “%_backup_%.bak„
      E Backup_TS = @sBAKFile_MaxTS;

DICHIARARE
   @sCoreAppName        varchar (128),
   @sRstrDBName         varchar (128),
   @sLogicalNameData    varchar (128),
   @sLogicalNameLog     varchar (128),
   @sPhysicalNameData   varchar (128),
   @sPhysicalNameLog    varchar (128)

   REGOLARE il @sCoreAppName = SOSTITUISCONO (@i_sLogPathAppName, “Sdc„, '');
   REGOLARE il @sRstrDBName =  SOSTITUISCONO (@sCoreAppName, “pungolo„, '');
   REGOLARE il @sRstrDBName =  il @i_sDevDbType + il @sRstrDBName;

   REGOLARE il @sLogicalNameData = il @i_sLogPathAppName + “_Data„;
   REGOLARE il @sLogicalNameLog = il @i_sLogPathAppName + “_Log„;

   REGOLARE il @sPhysicalNameData = “M:\MsSqlData\„ + @sRstrDBName + “_Data.MDF„;
   REGOLARE il @sPhysicalNameLog = “N:\MsSqlTranLog\„ + @sRstrDBName + “_Log.LDF„;

   il nome di DB di restauro della stampa “è„ + IsNull (@sRstrDBName, '');
   i Nome-Dati logici della stampa “sono„ + IsNull (@sLogicalNameData, '')
   i Nome-Dati fisici della stampa “sono„ + IsNull (@sPhysicalNameData, '')
   il Nome-Ceppo logico della stampa “è„ + IsNull (@sLogicalNameLog, '')
   il Nome-Ceppo fisico della stampa “è„ + IsNull (@sPhysicalNameLog, '')
   la lima di sostegno della stampa “è„ + IsNull (@sDirBAKFile, '')
   stampa ''

   @SRSTRDBNAME DELLA BASE DI DATI DI RESTAURO
      DAL DISC = @SDIRBAKFILE 
      CON SOSTITUIRE,
        SPOSTARE IL @SLOGICALNAMEDATA VERSO IL @SPHYSICALNAMEDATA, 
        SPOSTARE IL @SLOGICALNAMELOG VERSO @SPHYSICALNAMELOG,
        NORECOVERY;

   stampano “completato ristabilendo la base di dati con la lima di sostegno di„ + @sDirBAKFile


DICHIARARE TrnLog_cursor 
  CURSORE PER 
         SELEZIONARE DirTRNFile = il @sLogFullPath + la SOTTOSTRINGA (DirList, @iBAKFileNameStartPos, LEN (DirList))
           Da tempdb. .CmdDirAndTS_t
          DOVE DirList GRADICE “%_backup_%.trn„
            E @sBAKFile_MaxTS del >= di Backup_TS
          ORDINE da Backup_TS il CSA;

   APRIRE TrnLog_cursor

   ANDARE A PRENDERE DOPO da TrnLog_cursor 
    In @sDirTRNFile

   @LockResult di EXEC = @Resource dello sp_releaseapplock = “tempdb. .tables„,
										@LockOwner = “sessione„

tempo del *** della stampa “dopo che il RILASCIO della SERRATURA è„ + CONVERTITO (varchar (25), getdate (), 121);


   MENTRE @@FETCH_STATUS = 0
   COMINCIARE

      RISTABILIRE IL @SRSTRDBNAME DEL CEPPO
         DAL DISC = @SDIRTRNFILE 
         CON NORECOVERY;

      la stampa “ha completato l'applicazione del Logfile di transazione di„ + @sDirTRNFile
      stampa ''

      AMPIEZZA DOPO da TrnLog_cursor 
       In @sDirTRNFile

   ESTREMITÀ

   TrnLog_cursor VICINO
   CANCELL L'ASSEGNAZIONEARE di TrnLog_cursor

   RISTABILIRE IL @SRSTRDBNAME DELLA BASE DI DATI
   CON IL RECUPERO

   RITORNO 0


ERRORE:
   RAISERROR (@sErrorMessage, 16, 1)
      RESTITUIRE -1


ESTREMITÀ
Altre soluzioni  
 
programming4us programming4us