docs & tools: Actualización de informes y scripts de migración DASUTEN
This commit is contained in:
@@ -12,6 +12,7 @@
|
||||
require 'tiny_tds'
|
||||
require 'time'
|
||||
require 'json'
|
||||
require 'base64'
|
||||
require_relative 'lib/dasu_executor'
|
||||
|
||||
# Nombre del archivo con timestamp
|
||||
@@ -33,6 +34,10 @@ begin
|
||||
|
||||
sql_user = 'UTNlarioja\\monlaricardo'
|
||||
sql_host = '10.0.10.200'
|
||||
smb_user = 'rmonla'
|
||||
smb_server = 'srv-ns8'
|
||||
smb_share = 'bkps-dasuten'
|
||||
smb_path = "\\\\#{smb_server}\\#{smb_share}"
|
||||
|
||||
if sql_pass.empty?
|
||||
puts "[!] Error: No se pudo obtener credencial de candados"
|
||||
@@ -47,8 +52,24 @@ begin
|
||||
)
|
||||
puts "[+] Conectado a SQL Server en #{sql_host} (auth: Windows)"
|
||||
|
||||
# Mapear share SMB con credenciales usando PowerShell
|
||||
puts "\n[0/3] Mapeando share SMB #{smb_path}..."
|
||||
# Escapar password para PowerShell
|
||||
sql_pass_escaped = sql_pass.gsub("'", "''")
|
||||
ps_map = "net use X: #{smb_path} #{sql_pass_escaped} /user:#{smb_user} /persistent:no"
|
||||
map_result = client.execute("EXEC xp_cmdshell '#{ps_map}'")
|
||||
map_output = []
|
||||
map_result.each { |r| map_output << r['output'] if r['output'] && !r['output'].strip.empty? }
|
||||
puts " #{map_output.join("\n ")}"
|
||||
puts "[+] Share mapeado en X: -> #{smb_path}"
|
||||
|
||||
# Crear directorio en share si no existe
|
||||
puts "\n[1/3] Verificando directorio en share..."
|
||||
client.execute("EXEC master.sys.xp_create_subdir 'X:\\'").each { |r| }
|
||||
puts "[+] Directorio share asegurado: X:\\"
|
||||
|
||||
# Generar backup diferencial directamente en share X:
|
||||
puts "\n[0/2] Generando backup diferencial en share X:..."
|
||||
puts "[2/3] Generando backup diferencial en share X:..."
|
||||
start = Time.now
|
||||
|
||||
sql = <<~SQL.strip
|
||||
@@ -65,19 +86,22 @@ begin
|
||||
duracion = (Time.now - start).round(2)
|
||||
puts "[+] Backup diferencial generado en #{duracion} segundos"
|
||||
|
||||
# Verificar archivo en share usando módulo común
|
||||
puts "\n[1/2] Verificando archivo en share..."
|
||||
file_info = DasuExecutor.get_file_info_on_fenix(client, BACKUP_FILE)
|
||||
|
||||
if file_info[:exists]
|
||||
puts "[+] Archivo verificado: #{BACKUP_FILE} (#{file_info[:size_mb]} MB)"
|
||||
# Verificar archivo en share directamente en srv-ns8 vía SSH
|
||||
puts "\n[3/3] Verificando archivo en share..."
|
||||
backup_unix = BACKUP_FILE.gsub('X:\\', '/mnt/ns8Disco2/bkps-dasuten/')
|
||||
ls_result = `ssh rmonla@10.0.10.8 "ls -l '#{backup_unix}' 2>&1"`.strip
|
||||
if $?.success? && ls_result.include?(File.basename(backup_unix))
|
||||
# Extraer tamaño del output de ls -l
|
||||
file_size = ls_result.split[4].to_i
|
||||
puts "[+] Archivo verificado: #{backup_unix} (#{file_size.to_i / 1024 / 1024} MB)"
|
||||
else
|
||||
puts "[!] Error: No existe el archivo en #{BACKUP_FILE}"
|
||||
puts "[!] Error: No existe el archivo en #{backup_unix}"
|
||||
puts " SSH output: #{ls_result}"
|
||||
exit 1
|
||||
end
|
||||
|
||||
# Tamaño aproximado de la BD base
|
||||
puts "\n[2/2] Información de tamaño..."
|
||||
puts "\n[4/3] Información de tamaño..."
|
||||
begin
|
||||
size_info = client.execute("SELECT size_bytes = (SELECT size * 8192 FROM sys.database_files WHERE name = 'sysdasuten')")
|
||||
puts " Tamaño BD base: #{size_info.to_a.first['size_bytes'].to_i / 1024 / 1024} MB"
|
||||
|
||||
Reference in New Issue
Block a user