Listato 3 - restore.asp

<%
server.ScriptTimeout = 300 '5 minuti
'+-----------------------+
'|----- RESTORE ---------|
'+-----------------------+

inizioTempo = Timer()

'Recupero il nome del database
db_backup = trim(Request.Form("db_backup"))
db_restore = trim(Request.Form("db_restore"))
if len(db_restore) = 0 then Response.Redirect ("default.asp")

'La creazione del nuovo database per il restore richiede di appoggiarci
'ad una connessione esistente: utilizziamo il db di backup
call dbConnect(objConn, db_backup)
'Creazione del database nel quale effettuare il restore:
'il db non deve già essere presente in elenco
strSQL = "CREATE DATABASE "& db_restore &";" 'Query standard di MySQL
objConn.Execute (strSQL)
call dbDisconnect(objConn, db_backup)

call dbConnect(objConn, db_restore)

'Cartella con i permessi di scrittura
folder_file = ("public")

response.write ("<html>")
response.write ("<title>Restore</title>")
response.write ("<body style=""font-family:verdana;font:12px;"">")

'Lettura del file 'crea_tabelle.txt'
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.OpenTextFile(server.MapPath(folder_file &"/crea_tabelle.txt"))
create_tables = f.ReadAll
Set f = nothing
Set fso = nothing

arr_str = split(create_tables,";")
'Esecuzione dello script di creazione tabelle
for query = 0 to Ubound(arr_str)-1
objConn.Execute (arr_str(query))
next
Response.Write ("Script creazione tabelle: <strong>eseguito!</strong><br /><br />")

'Elimino lo script di crezione tabelle
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.fileExists(server.MapPath(folder_file &"/crea_tabelle.txt")) then
fso.DeleteFile(server.MapPath(folder_file &"/crea_tabelle.txt"))
end if
Set fso = nothing

'Path assoluto
path_translated = Request.ServerVariables("path_translated")
pos_path = instrrev(path_translated,"\")
path = left(path_translated, pos_path)

'Path per la lettura dei file .sql
write_path = path & folder_file &"\"

'Path corretto per essere usato direttamente nella query sql
write_path = replace(write_path,"\","\\")

'Scorro le tabelle
Set Rs = Server.CreateObject("ADODB.Recordset")
strTables = "SHOW TABLES;" 'Query standard di MySQL
Rs.Open strTables, objConn
if not rs.EOF then

do while not(rs.eof)
'Effettuo il restore, tabella per tabella
strLoadFile = ""
strLoadFile = strLoadFile &"LOAD DATA INFILE '"& write_path & rs(0) &".sql' INTO TABLE "& rs(0) &" "
strLoadFile = strLoadFile &"FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '""' "
strLoadFile = strLoadFile &"LINES TERMINATED BY '\n'" 'Query standard di MySQL
objConn.Execute (strLoadFile)

'Visualizzo l'esito degli script di restore delle tabelle
Response.Write ("Tabella '"& Rs(0) &"': <strong>restore eseguito!</strong><br />")

'Elimino il file di backup
Set fso = CreateObject("Scripting.FileSystemObject")
if fso.fileExists(server.MapPath(folder_file &"/"& rs(0) &".sql")) then
fso.DeleteFile(server.MapPath(folder_file &"/"& rs(0) &".sql"))
end if
Set fso = nothing

rs.movenext
loop
end if
rs.close
set rs = nothing

response.write ("<br />Tempo di esecuzione: "& (timer() - inizioTempo)) &" secondi."

response.write ("</body>")
response.write ("</html>")

call dbDisconnect(objConn, db_restore)

'SUB
'Apertura connessione database di backup
sub dbConnect(objConn, db_backup)
connectionstring = "DRIVER={MySQL ODBC 3.51 Driver};DATABASE="& db_backup &";SERVER=localhost;UID=root;PASSWORD="
set objConn = server.createObject("ADODB.Connection")
objConn.Open connectionstring
end sub

'Chiusura connessione database di backup
sub dbDisconnect(objConn, db_backup)
objConn.close
set objConn = nothing
end sub

'Apertura connessione database di restore
sub dbConnect(objConn, db_restore)
connectionstring = "DRIVER={MySQL ODBC 3.51 Driver};DATABASE="& db_restore &";SERVER=localhost;UID=root;PASSWORD="
set objConn = server.createObject("ADODB.Connection")
objConn.Open connectionstring
end sub

'Chiusura connessione database di backup
sub dbDisconnect(objConn, db_restore)
objConn.close
set objConn = nothing
end sub
%>