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À
|