Created
May 31, 2022 23:05
-
-
Save rogerioadris/3b11021b4c31f9dcd467f02e1673bd35 to your computer and use it in GitHub Desktop.
Restaurar banco de dados MSSQL no contêiner Docker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
echo "Restaurando banco de dados..." | |
RED='\033[0;31m' | |
GRE='\033[0;32m' | |
NC='\033[0m' | |
DATABASE="" | |
FILE_FULL="" | |
FILE_DIFF="" | |
FILES_LOG=() | |
# | |
# Encontrar arquivos | |
# | |
function find_files { | |
echo "Encontrando arquivos" | |
for restoreFile in /var/opt/mssql/backup/*.{bak,trn} | |
do | |
fileName=${restoreFile##*/} | |
if [[ $restoreFile == *"_Dados_"* && $restoreFile != *"_Diferencial_Dados_"* ]]; then | |
DATABASE=${fileName%%_Dados*.bak} | |
FILE_FULL=$restoreFile | |
elif [[ $restoreFile == *"_Diferencial_Dados_"* ]]; then | |
FILE_DIFF=$restoreFile | |
else | |
FILES_LOG+=($restoreFile) | |
fi | |
done | |
LOGS_TOTAL=$(( ${#FILES_LOG[*]} - 1 )) | |
LOGS_LAST=${FILES_LOG[$LOGS_TOTAL]} | |
echo "Arquivos encontrados: " | |
echo -e "\t Banco dados: ${GRE}${DATABASE}${NC}" | |
echo -e "\t\tFull: ${GRE}${FILE_FULL}${NC}" | |
echo -e "\t\tDiff: ${GRE}${FILE_DIFF}${NC}" | |
echo -e " Arquivos de logs: ${GRE}${LOGS_TOTAL}${NC}" | |
} | |
# | |
# Montar SQL | |
# | |
function generate_command { | |
command="" | |
command="${command}USE [master];" | |
# Arquivo FULL | |
command="$command RESTORE DATABASE [${DATABASE}] " | |
command="$command FROM DISK = N'$FILE_FULL' " | |
command="$command WITH FILE = 1, " | |
command="$command MOVE N'${DATABASE}' TO N'/var/opt/mssql/data/${DATABASE}.mdf', " | |
command="$command MOVE N'${DATABASE}_log' TO N'/var/opt/mssql/data/${DATABASE}_log.ldf', " | |
command="$command NORECOVERY, NOUNLOAD, REPLACE, STATS = 5 " | |
# Arquivo Diff | |
command="$command RESTORE DATABASE [${DATABASE}] FROM DISK = N'${FILE_DIFF}' " | |
command="$command WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5 " | |
# Arquivos de log | |
for file in "${FILES_LOG[@]}"; do | |
# Verificar se é último arquivo de log, não deve ter NORECOVERY no comando | |
if [[ $file == $LOGS_LAST ]]; then | |
command="${command} RESTORE LOG [${DATABASE}] FROM DISK = N'$file' WITH FILE = 1, NOUNLOAD, STATS = 5 " | |
break | |
else | |
command="${command} RESTORE LOG [${DATABASE}] FROM DISK = N'$file' WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 5 " | |
fi | |
done | |
# | |
command="${command};" | |
# command="${command}ALTER DATABASE [${DATABASE}] SET MULTI_USER;" | |
echo $command; | |
} | |
# | |
# Executar | |
# | |
function execute { | |
command=$1 | |
if [ ! -f "/var/opt/mssql/data/${DATABASE}.mdf" ]; then | |
touch "/var/opt/mssql/data/${DATABASE}.mdf" | |
fi | |
if [ ! -f "/var/opt/mssql/data/${DATABASE}_log.ldf" ]; then | |
touch "/var/opt/mssql/data/${DATABASE}_log.ldf" | |
fi | |
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P $MSSQL_SA_PASSWORD -Q "$command" | |
} | |
# | |
# | |
# | |
find_files | |
command=$(generate_command) | |
execute "$command" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment