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:
|
ИЗМЕНИТЕ ПРОЦЕДУРУ [dbo]. [p_RestoreBackupDirForNightlyLoad]
@i_sDevDbType varchar (8),
@i_sLogPathAppName varchar (40)
КАК
НАЧНИТЕ
ОБЪЯВИТЕ
бит @bValidDevDbType,
бит @bValidLogPathAppName,
@sErrorMessage varchar (250)
УСТАНОВИТЕ @bValidDevDbType = 0
ВЫБЕРИТЕ @bValidDevDbType = 1
ГДЕ @i_sDevDbType ВНУТРИ («доработано», «еженощно ")
ЕСЛИ @bValidDevDbType = 0
НАЧНИТЕ
УСТАНОВИТЕ @sErrorMessage = @i_sDevDbType + «- параметр входящего потока инвалидный. Приравнивать «доработано» или «еженощно»»
ПЕРЕХОД ОШИБКА
КОНЕЦ
;
УСТАНОВИТЕ @bValidLogPathAppName = 0
ВЫБЕРИТЕ @bValidLogPathAppName = 1
ГДЕ @i_sLogPathAppName В (различные имена базы данных здесь)
ЕСЛИ @bValidLogPathAppName = 0
НАЧНИТЕ
УСТАНОВИТЕ @sErrorMessage = @i_sLogPathAppName + «- параметр входящего потока инвалидный.»
ПЕРЕХОД ОШИБКА
КОНЕЦ
;
ОБЪЯВИТЕ
@sLogFullPath varchar (100),
@sBackupFileList varchar (100),
@iBAKFileNameStartPos int,
@iCmdReturnCode int,
@sCommand varchar (150),
@sBAKFile_MaxTS varchar (12),
@sDirBAKFile varchar (100),
@sDirTRNFile varchar (100)
ОБЪЯВИТЕ
@LockResult int;
временем *** печати «прежде чем ЗАПРОСОМ ЗАМКА будет» + НОВООБРАЩЕННЫЙ (varchar (25), getdate (), 121);
@LockResult EXEC = @Resource sp_getapplock = «tempdb. .tables»,
@LockMode = «исключение»,
@LockOwner = «встреча»,
@LockTimeout = 3600000;
если >= 0 @LockResult
начните
напечатайте «ЗАМОК *** ый на» + НОВООБРАЩЕННЫЙ (varchar (25), getdate (), 121);
конец
еще
начните
напечатайте «ЗАМОК успешно, время ***» + НОВООБРАЩЕННЫЙ (varchar (25), getdate (), 121);
конец
;
ЕСЛИ OBJECT_ID, то (N'U') N'tempdb. .CmdDirContents_t', не НУЛЕВО
Tempdb. .CmdDirContents_t ТАБЛИЦЫ ПАДЕНИЯ;
СОЗДАЙТЕ tempdb. .CmdDirContents_t ТАБЛИЦЫ
(
NULL DirList varchar (100 )
);
ЕСЛИ OBJECT_ID, то (N'U') N'tempdb. .CmdDirAndTS_t', не НУЛЕВО
Tempdb. .CmdDirAndTS_t ТАБЛИЦЫ ПАДЕНИЯ;
СОЗДАЙТЕ tempdb. .CmdDirAndTS_t ТАБЛИЦЫ
(
NULL DirList varchar (100 ) НЕ,
NULL Backup_TS varchar (12 ) НЕ
);
УСТАНОВИТЕ @sLogFullPath = «K:\BackMeUp\User\»
+ @i_sLogPathAppName
+ «\»;
курс LogFullPath печати «к подпорке» + IsNull (@sLogFullPath, '')
УСТАНОВИТЕ @sBackupFileList = @sLogFullPath + «BackupFileList.txt»
УСТАНОВИТЕ @sCommand = «del» + @sBackupFileList;
@iCmdReturnCode exec = @sCommand xp_cmdshell
УСТАНОВИТЕ @sCommand = «dir» + @sLogFullPath + «>» + @sBackupFileList
@iCmdReturnCode exec = @sCommand xp_cmdshell
печать «BackupFileList обнаружена местонахождение на» + IsNull (@sBackupFileList, '')
ОБЪЯВИТЕ
@sSqlStmt nvarchar (250)
УСТАНОВИТЕ @sSqlStmt =
Tempdb. .CmdDirContents_t ВСТАВКИ N'BULK '+
N'FROM «+ QUOTENAME (@SBACKUPFILELIST) + N '' +
N'WITH '+
N'(FIELDTERMINATOR = '' \ t '', '+
N'FIRSTROW = 1, '+
N'KEEPNULLS, '+
N'ROWTERMINATOR = '' \ n '') ';
@sSqlStmt sp_executesql EXEC;
ЕСЛИ @@ERROR = 0
Напечатайте «успешно вставку в tempdb. .CmdDirContents_t»
DELETE
ОТ tempdb. .CmdDirContents_t
ГДЕ DirList НУЛЕВО;
DELETE
ОТ tempdb. .CmdDirContents_t
ГДЕ DirList НЕ ЛЮБИТ «%_backup_%.bak»
И DirList НЕ ЛЮБИТ «%_backup_%.trn»;
ВВЕДИТЕ tempdb. .CmdDirAndTS_t
ВЫБЕРИТЕ DirList,
Backup_TS = О (ПРАВО (DirList, 16), 12)
ОТ tempdb. .CmdDirContents_t;
ВЫБЕРИТЕ * от tempdb. .CmdDirAndTS_t;
ВЫБЕРИТЕ @sBAKFile_MaxTS = mxbk. Backup_TS
ОТ (ВЫБЕРИТЕ ВЕРХНЮЮ ЧАСТЬ 1
*
ОТ tempdb. .CmdDirAndTS_t
ГДЕ DirList ЛЮБИТ «%_backup_%.bak»
ЗАКАЗ 2 DESC
) mxbk;
печать ''
выбранная фиксация времени печати «резервного файла» + IsNull (@sBAKFile_MaxTS, '');
ВЫБЕРИТЕ @iBAKFileNameStartPos = PATINDEX («%» + @i_sLogPathAppName + «_b» + «%», DirList)
ОТ tempdb. .CmdDirAndTS_t
ГДЕ DirList ЛЮБИТ «%_backup_%.bak»
И Backup_TS = @sBAKFile_MaxTS;
ВЫБЕРИТЕ @sDirBAKFile = @sLogFullPath + ПОДСТРОКА (DirList, @iBAKFileNameStartPos, LEN (DirList))
ОТ tempdb. .CmdDirAndTS_t
ГДЕ DirList ЛЮБИТ «%_backup_%.bak»
И Backup_TS = @sBAKFile_MaxTS;
ОБЪЯВИТЕ
@sCoreAppName varchar (128),
@sRstrDBName varchar (128),
@sLogicalNameData varchar (128),
@sLogicalNameLog varchar (128),
@sPhysicalNameData varchar (128),
@sPhysicalNameLog varchar (128)
УСТАНОВИТЕ @sCoreAppName = ЗАМЕНИТЕ (@i_sLogPathAppName, «Sdc», '');
УСТАНОВИТЕ @sRstrDBName = ЗАМЕНИТЕ (@sCoreAppName, «Prod», '');
УСТАНОВИТЕ @sRstrDBName = @i_sDevDbType + @sRstrDBName;
УСТАНОВИТЕ @sLogicalNameData = @i_sLogPathAppName + «_Data»;
УСТАНОВИТЕ @sLogicalNameLog = @i_sLogPathAppName + «_Log»;
УСТАНОВИТЕ @sPhysicalNameData = «M:\MsSqlData\» + @sRstrDBName + «_Data.MDF»;
УСТАНОВИТЕ @sPhysicalNameLog = «N:\MsSqlTranLog\» + @sRstrDBName + «_Log.LDF»;
имя DB восстановления печати «» + IsNull (@sRstrDBName, '');
Им-Данные печати «логически» + IsNull (@sLogicalNameData, '')
Им-Данные печати «физические» + IsNull (@sPhysicalNameData, '')
Им-Журнал печати «логически» + IsNull (@sLogicalNameLog, '')
Им-Журнал печати «физический» + IsNull (@sPhysicalNameLog, '')
резервный файл печати «» + IsNull (@sDirBAKFile, '')
печать ''
@SRSTRDBNAME БАЗЫ ДАННЫХ ВОССТАНОВЛЕНИЯ
ОТ ДИСКА = @SDIRBAKFILE
С ЗАМЕНИТЕ,
ДВИНЬТЕ @SLOGICALNAMEDATA К @SPHYSICALNAMEDATA,
ДВИНЬТЕ @SLOGICALNAMELOG К @SPHYSICALNAMELOG,
NORECOVERY;
напечатайте «завершено восстанавливающ базу данных с резервным файлом» + @sDirBAKFile
ОБЪЯВИТЕ TrnLog_cursor
СТРЕЛКА ДЛЯ
ВЫБЕРИТЕ DirTRNFile = @sLogFullPath + ПОДСТРОКУ (DirList, @iBAKFileNameStartPos, LEN (DirList))
ОТ tempdb. .CmdDirAndTS_t
ГДЕ DirList ЛЮБИТ «%_backup_%.trn»
И @sBAKFile_MaxTS >= Backup_TS
ЗАКАЗ Backup_TS asc;
РАСКРОЙТЕ TrnLog_cursor
FETCH ЗАТЕМ ОТ TrnLog_cursor
В @sDirTRNFile
@LockResult EXEC = @Resource sp_releaseapplock = «tempdb. .tables»,
@LockOwner = «встреча»
временем *** печати «после того как ОТПУСКОМ ЗАМКА будет» + НОВООБРАЩЕННЫЙ (varchar (25), getdate (), 121);
ПОКА @@FETCH_STATUS = 0
НАЧНИТЕ
ВОССТАНОВИТЕ @SRSTRDBNAME ЖУРНАЛА
ОТ ДИСКА = @SDIRTRNFILE
С NORECOVERY;
печать «выполнила прикладывать Logfile трудыов» + @sDirTRNFile
печать ''
FETCH ЗАТЕМ ОТ TrnLog_cursor
В @sDirTRNFile
КОНЕЦ
БЛИЗКОЕ TrnLog_cursor
DEALLOCATE TrnLog_cursor
ВОССТАНОВИТЕ @SRSTRDBNAME БАЗЫ ДАННЫХ
С СПАСЕНИЕМ
ВОЗВРАЩЕНИЕ 0
ОШИБКА:
RAISERROR (@sErrorMessage, 16, 1)
ВОЗВРАТИТЕ -1
КОНЕЦ
|