Vraag : herstel manuscript nodig voor reserve

Hello,
I am die met een manuscript probeert op de proppen te komen dat herstelt hier de „recentste“ file aan de reservegegevensbestanden maar mijn dilemma…. isis het reserveplan

Our als volgt:

nightly moet volledige backups
twice de dagelijkse differentiële het logboek backups

These van de backups
hourly transactie over aan de reserveservers in verschillende folders

I worden geduwd het proces automatiseren om de juiste files te vinden…. en herstellend het gegevensbestand (hoogtepunt, verschil, transactielogboeken)

Can voorziet iemand me a van een malplaatje dat elk van dit kan doen ik niet heb kunnen vinden wat de behoefte van I online. Thanks.



Antwoord : herstel manuscript nodig voor reserve

Als u om het even wat niet beter wordt, is dit proc dicht.  Het herstelt de meest recente file en herstelt dan de verdere logboeken.  Wij doen geen verschillen, zodat behandelt het hen niet.   Sommige wegen zijn hard-gecodeerd, zijn er veronderstellingen over gegevensbestand logische namen, en die het veronderstelt de reservebestanden met het formaat genoemd worden door sql onderhoudsplannen wordt gecre�ërd.
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:
VERANDER PROCEDURE [dbo]. [p_RestoreBackupDirForNightlyLoad]

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

ZOALS
BEGIN

VERKLAAR
   @bValidDevDbType       beetje,
   @bValidLogPathAppName  beetje,
   varchar         @sErrorMessage (250)

REEKS @bValidDevDbType = 0
SELECTEER @bValidDevDbType = 1
 WAAR @i_sDevDbType BINNEN („„Nightly“ Gewijzigd“,)
 
ALS @bValidDevDbType = 0
   BEGIN
    PLAATS @sErrorMessage = @i_sDevDbType + „- Ingevoerde ongeldige parameter.  Moet evenaren „Gewijzigd“ of „Nightly““
	FOUT GOTO
   EIND
;

REEKS @bValidLogPathAppName = 0
SELECTEER @bValidLogPathAppName = 1
 WAAR @i_sLogPathAppName BINNEN (diverse gegevensbestandnamen hier)
 
ALS @bValidLogPathAppName = 0
   BEGIN
    PLAATS @sErrorMessage = @i_sLogPathAppName + „- Ingevoerde ongeldige parameter.“
	FOUT GOTO
   EIND
;

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

   @iBAKFileNameStartPos int.,

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


VERKLAAR 
   @LockResult           int.;

de druk „*** tijd vóór het VERZOEK van het SLOT is“ + varchar BEKEERLING ((25), getdate (), 121);
    EXEC @LockResult = sp_getapplock @Resource = „tempdb. .tables“, 
									 @LockMode = „Exclusief“,
									 @LockOwner = „Zitting“,
									 @LockTimeout  = 3600000;

als @LockResult >= 0 
   begin
     druk „SLOT *** wordt verleend bij“ + varchar BEKEERLING ((25), getdate (), 121 die);
   eind
anders
   begin
     druk „niet succesvol SLOT ***, is de tijd“ + varchar BEKEERLING ((25), getdate (), 121);
   eind
;


    ALS OBJECT_ID (N'tempdb. .CmdDirContents_t', N'U') IS NIET ONGELDIG 
        De LIJST tempdb. .CmdDirContents_t van de DALING;


    CRE�ëR LIJST tempdb. .CmdDirContents_t 
    (
     Van DirList       varchar (100)  ONGELDIG
     );


    ALS OBJECT_ID (N'tempdb. .CmdDirAndTS_t', N'U') IS NIET ONGELDIG 
        De LIJST tempdb. .CmdDirAndTS_t van de DALING;


    CRE�ëR LIJST tempdb. .CmdDirAndTS_t 
    (
     Varchar       DirList (100)  NIETIG VERKLAREN niet,
     Varchar     Backup_TS (12)   NIET VERKLAART nietig     
     );


    REEKS @sLogFullPath = „K:\BackMeUp\User\“
                      + @i_sLogPathAppName
                      + „\“;
    de druk  de „weg van LogFullPath aan file is“ + IsNull (@sLogFullPath, '')

    VASTGESTELDE @sBackupFileList = @sLogFullPath + „BackupFileList.txt“
    REEKS @sCommand = „del“ + @sBackupFileList;

    exec @iCmdReturnCode = xp_cmdshell @sCommand
    REEKS @sCommand = „dir“ + @sLogFullPath + „>“ + @sBackupFileList
    exec @iCmdReturnCode = xp_cmdshell @sCommand
    de druk  „BackupFileList wordt gevestigd bij“ + IsNull (@sBackupFileList, '')
    

VERKLAAR
   @sSqlStmt   nvarchar (250)

        REEKS @sSqlStmt = 
            N'BULK TUSSENVOEGSEL tempdb. .CmdDirContents_t '+ 
            N'FROM „+ QUOTENAME (@SBACKUPFILELIST)  + N“ '+ 
            N'WITH '+ 
               N'(FIELDTERMINATOR = '' \ t '', '+ 
               N'FIRSTROW = 1, '+ 
               N'KEEPNULLS, '+
               N'ROWTERMINATOR = '' \ n '') ';

        EXEC sp_executesql @sSqlStmt;

        ALS @@ERROR = 0
           Druk „Succesvol Tussenvoegsel in tempdb. .CmdDirContents_t“


    SCHRAP 
      VAN tempdb. .CmdDirContents_t
     WAAR DirList ONGELDIG IS;

    SCHRAP 
      VAN tempdb. .CmdDirContents_t
     WAAR DirList ZOALS „geen %_backup_%.bak“
       EN DirList ZOALS „geen %_backup_%.trn“;

    TUSSENVOEGSEL tempdb. .CmdDirAndTS_t
    SELECTEER DirList,
           Backup_TS = WEGGEGAAN (JUIST (DirList, 16), 12)
      VAN tempdb. .CmdDirContents_t;

   SELECTEER * uit tempdb. .CmdDirAndTS_t;

   SELECTEER @sBAKFile_MaxTS = mxbk. Backup_TS
     VAN (UITGEZOCHTE BOVENKANT 1
                  *
             VAN tempdb. .CmdDirAndTS_t
            WAAR DirList ZOALS „%_backup_%.bak“
            ORDE DOOR 2 DESC
           ) mxbk;

   druk ''
   de druk „gekozen Timestamp van reservebestand is“ + IsNull (@sBAKFile_MaxTS, '');

   SELECTEER @iBAKFileNameStartPos = PATINDEX („%“ + @i_sLogPathAppName + „_b“ + „%“, DirList)
     VAN tempdb. .CmdDirAndTS_t
    WAAR DirList ZOALS „%_backup_%.bak“
      EN Backup_TS = @sBAKFile_MaxTS;


   SELECTEER @sDirBAKFile = @sLogFullPath + SUBSTRING (DirList, @iBAKFileNameStartPos, LEN (DirList))
     VAN tempdb. .CmdDirAndTS_t
    WAAR DirList ZOALS „%_backup_%.bak“
      EN Backup_TS = @sBAKFile_MaxTS;

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

   De REEKS @sCoreAppName = VERVANGT (@i_sLogPathAppName, „Sdc“, '');
   De REEKS @sRstrDBName =  VERVANGT (@sCoreAppName, „Prik“, '');
   REEKS @sRstrDBName =  @i_sDevDbType + @sRstrDBName;

   VASTGESTELDE @sLogicalNameData = @i_sLogPathAppName + „_Data“;
   REEKS @sLogicalNameLog = @i_sLogPathAppName + „_Log“;

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

   de druk „herstelt de Naam van OB is“ + IsNull (@sRstrDBName, '');
   de druk „Logische naam-Gegevens is“ + IsNull (@sLogicalNameData, '')
   de druk „Fysieke naam-Gegevens is“ + IsNull (@sPhysicalNameData, '')
   de druk „Logisch naam-Logboek is“ + IsNull (@sLogicalNameLog, '')
   de druk „Fysiek naam-Logboek is“ + IsNull (@sPhysicalNameLog, '')
   de druk „Reservebestand is“ + @sDirBAKFile IsNull (, '')
   druk ''

   HERSTEL GEGEVENSBESTAND @SRSTRDBNAME
      VAN SCHIJF = @SDIRBAKFILE 
      MET VERVANG,
        VERPLAATS @SLOGICALNAMEDATA NAAR @SPHYSICALNAMEDATA, 
        BEWEEG ME @SLOGICALNAMELOG AAN @SPHYSICALNAMELOG,
        NORECOVERY;

   druk „Voltooid herstellend gegevensbestand met reservebestand van“ + @sDirBAKFile


VERKLAAR TrnLog_cursor 
  CURSEUR VOOR 
         SELECTEER DirTRNFile = @sLogFullPath + SUBSTRING (DirList, @iBAKFileNameStartPos, LEN (DirList))
           VAN tempdb. .CmdDirAndTS_t
          WAAR DirList ZOALS „%_backup_%.trn“
            EN Backup_TS >= @sBAKFile_MaxTS
          ORDE DOOR Backup_TS asc;

   OPEN TrnLog_cursor

   HAAL DAARNA VAN TrnLog_cursor 
    IN @sDirTRNFile

   EXEC @LockResult = sp_releaseapplock @Resource = „tempdb. .tables“,
										@LockOwner = „Zitting“

de druk „*** tijd na de VERSIE van het SLOT is“ + varchar BEKEERLING ((25), getdate (), 121);


   TERWIJL @@FETCH_STATUS = 0
   BEGIN

      HERSTEL LOGBOEK @SRSTRDBNAME
         VAN SCHIJF = @SDIRTRNFILE 
         MET NORECOVERY;

      voltooide druk „toepassend Logfile van de Transactie van“ + @sDirTRNFile
      druk ''

      HAAL DAARNA VAN TrnLog_cursor 
       IN @sDirTRNFile

   EIND

   DICHTE TrnLog_cursor
   DEALLOCATE TrnLog_cursor

   HERSTEL GEGEVENSBESTAND @SRSTRDBNAME
   MET TERUGWINNING

   TERUGKEER 0


FOUT:
   RAISERROR (@sErrorMessage, 16, 1)
      TERUGKEER -1


EIND
Andere oplossingen  
 
programming4us programming4us