Вопрос : сценарий восстановления нужный для standby

Здравствулте!,
I am пытаясь прийти вверх с сценарием который восстанавливает «самую последнюю» подпорку к резервным базам данных но здесь будет моя дилемма….план

Our резервный следующим образом: подпорки backups

These журнала трудыов backups
hourly backups
twice

nightly полные ежедневные дифференциальные нажаты сверх к резервным серверам в по-разному потребности folders

I автоматизировать процесс находить правые подпорки…. и восстанавливающ

Can базы данных (вполне, дифференциал, журналы трудыов) кто-то обеспечивает мне a с шаблоном который может сделать все из этого, котор я неспособен найти мне нужно он-лайн. Thanks.



class=

Ответ : сценарий восстановления нужный для standby

Если вы не получаете что-нибыдь лучше, то это proc близко.  Оно восстанавливает самую недавнюю подпорку и после этого восстанавливает затем журналы.  Мы не делаем дифференциалы, поэтому оно не регулирует их.   Некоторые курсы hard-coded, будут предположения о именах базы данных логически, и она предполагает резервные файлы названы при форма созданная планами обслуживания 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:
ИЗМЕНИТЕ ПРОЦЕДУРУ [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


КОНЕЦ
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us