??
This commit is contained in:
@@ -1,88 +1,88 @@
|
||||
Function IsDatabaseExists{
|
||||
param([string]$containerId, [string]$database, [string]$sqlPass)
|
||||
$query = "IF EXISTS
|
||||
(SELECT name FROM master.sys.databases WHERE name = N'$database')
|
||||
PRINT 'yes'
|
||||
ELSE
|
||||
PRINT 'no'"
|
||||
return (docker exec $containerId /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $sqlPass -Q $query)
|
||||
# USE master; ALTER DATABASE b-crm-master; SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE b-crm-master;
|
||||
}
|
||||
Function DropDatabase{
|
||||
param([string]$containerId, [string]$database, [string]$sqlPass)
|
||||
$query = "USE master;
|
||||
ALTER DATABASE [$database]
|
||||
SET SINGLE_USER
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
GO
|
||||
DROP DATABASE [$database];"
|
||||
docker exec $containerId /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $sqlPass -Q $query > $null
|
||||
return;
|
||||
# /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'v](8Lc|RfG' -Q "USE master; ALTER DATABASE b-crm-master; SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE b-crm-master;"
|
||||
}
|
||||
Function AttachDatabase{
|
||||
param([string]$containerId, [string]$database, [string]$sqlPass, [string]$mdfName, [string]$ldfName)
|
||||
$query = "CREATE DATABASE [$database]
|
||||
ON (FILENAME = N'/var/opt/mssql/data/$mdfName'),
|
||||
(FILENAME = N'/var/opt/mssql/data/$ldfName') FOR ATTACH;
|
||||
ALTER DATABASE [$database] SET READ_WRITE;"
|
||||
docker exec $containerId /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $sqlPass -Q $query
|
||||
return;
|
||||
}
|
||||
Function CopyFile{
|
||||
param([string]$containerId, [string]$fileName)
|
||||
docker cp ./Temp/$fileName $containerId"://var/opt/mssql/data/$fileName"
|
||||
docker exec --user root $containerId chown mssql:root /var/opt/mssql/data/$fileName
|
||||
return;
|
||||
}
|
||||
|
||||
if ((Split-Path (Get-Location) -Leaf) -ne "DiunaBI") {
|
||||
Write-Host "Error: Run script from main source directory.";
|
||||
Exit;
|
||||
}
|
||||
try {
|
||||
$containerId = (docker ps | Select-String "mssql").Line.split(" ")[0]
|
||||
} catch {
|
||||
Write-Host "Error: MSSQL container not exists (or Docker is not running)";
|
||||
Exit;
|
||||
}
|
||||
Write-Host "MSSQL container id: "$containerId;
|
||||
|
||||
$sqlPass = "v](8Lc|RfG";
|
||||
# Let's do the job!
|
||||
@("diuna").ForEach({
|
||||
$database = $_;
|
||||
$ldfName = $database+"_log.ldf";
|
||||
$mdfName = $database+".mdf";
|
||||
|
||||
Write-Host "Restoring database: "$database
|
||||
# Download mdf/ldf nd check if files are new (donwload with success)
|
||||
scp "crm.bim-it.pl:/var/opt/mssql/data/$mdfName" ./Temp/
|
||||
if (((Get-Date) - ((Get-Item ./Temp/$mdfName).LastWriteTime)).TotalMinutes -gt 5) {
|
||||
Write-Host "Error: $mdfName was not downloaded correctly."
|
||||
continue;
|
||||
}
|
||||
scp "crm.bim-it.pl:/var/opt/mssql/data/$ldfName" ./Temp/
|
||||
if (((Get-Date) - ((Get-Item ./Temp/$ldfName).LastWriteTime)).TotalMinutes -gt 5) {
|
||||
Write-Host "Error: $ldfName was not downloaded correctly."
|
||||
continue;
|
||||
}
|
||||
|
||||
#drop existing database
|
||||
DropDatabase $containerId $database $sqlPass;
|
||||
if ((IsDatabaseExists $containerId $database $sqlPass) -eq 'yes') {
|
||||
Write-Host "Error: $database still exists (drop error)"
|
||||
continue;
|
||||
}
|
||||
#copy new files
|
||||
CopyFile $containerId $mdfName
|
||||
CopyFile $containerId $ldfName
|
||||
#attach databases in container
|
||||
AttachDatabase $containerId $database $sqlPass $mdfName $ldfName;
|
||||
if ((IsDatabaseExists $containerId $database $sqlPass) -eq 'no') {
|
||||
Write-Host "Error: $database still not exists (attach error)"
|
||||
continue;
|
||||
}
|
||||
Write-Host "OK";
|
||||
});
|
||||
Function IsDatabaseExists{
|
||||
param([string]$containerId, [string]$database, [string]$sqlPass)
|
||||
$query = "IF EXISTS
|
||||
(SELECT name FROM master.sys.databases WHERE name = N'$database')
|
||||
PRINT 'yes'
|
||||
ELSE
|
||||
PRINT 'no'"
|
||||
return (docker exec $containerId /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $sqlPass -Q $query)
|
||||
# USE master; ALTER DATABASE b-crm-master; SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE b-crm-master;
|
||||
}
|
||||
Function DropDatabase{
|
||||
param([string]$containerId, [string]$database, [string]$sqlPass)
|
||||
$query = "USE master;
|
||||
ALTER DATABASE [$database]
|
||||
SET SINGLE_USER
|
||||
WITH ROLLBACK IMMEDIATE;
|
||||
GO
|
||||
DROP DATABASE [$database];"
|
||||
docker exec $containerId /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $sqlPass -Q $query > $null
|
||||
return;
|
||||
# /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P 'v](8Lc|RfG' -Q "USE master; ALTER DATABASE b-crm-master; SET SINGLE_USER WITH ROLLBACK IMMEDIATE; DROP DATABASE b-crm-master;"
|
||||
}
|
||||
Function AttachDatabase{
|
||||
param([string]$containerId, [string]$database, [string]$sqlPass, [string]$mdfName, [string]$ldfName)
|
||||
$query = "CREATE DATABASE [$database]
|
||||
ON (FILENAME = N'/var/opt/mssql/data/$mdfName'),
|
||||
(FILENAME = N'/var/opt/mssql/data/$ldfName') FOR ATTACH;
|
||||
ALTER DATABASE [$database] SET READ_WRITE;"
|
||||
docker exec $containerId /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P $sqlPass -Q $query
|
||||
return;
|
||||
}
|
||||
Function CopyFile{
|
||||
param([string]$containerId, [string]$fileName)
|
||||
docker cp ./Temp/$fileName $containerId"://var/opt/mssql/data/$fileName"
|
||||
docker exec --user root $containerId chown mssql:root /var/opt/mssql/data/$fileName
|
||||
return;
|
||||
}
|
||||
|
||||
if ((Split-Path (Get-Location) -Leaf) -ne "DiunaBI") {
|
||||
Write-Host "Error: Run script from main source directory.";
|
||||
Exit;
|
||||
}
|
||||
try {
|
||||
$containerId = (docker ps | Select-String "mssql").Line.split(" ")[0]
|
||||
} catch {
|
||||
Write-Host "Error: MSSQL container not exists (or Docker is not running)";
|
||||
Exit;
|
||||
}
|
||||
Write-Host "MSSQL container id: "$containerId;
|
||||
|
||||
$sqlPass = "v](8Lc|RfG";
|
||||
# Let's do the job!
|
||||
@("diuna").ForEach({
|
||||
$database = $_;
|
||||
$ldfName = $database+"_log.ldf";
|
||||
$mdfName = $database+".mdf";
|
||||
|
||||
Write-Host "Restoring database: "$database
|
||||
# Download mdf/ldf nd check if files are new (donwload with success)
|
||||
scp "crm.bim-it.pl:/var/opt/mssql/data/$mdfName" ./Temp/
|
||||
if (((Get-Date) - ((Get-Item ./Temp/$mdfName).LastWriteTime)).TotalMinutes -gt 5) {
|
||||
Write-Host "Error: $mdfName was not downloaded correctly."
|
||||
continue;
|
||||
}
|
||||
scp "crm.bim-it.pl:/var/opt/mssql/data/$ldfName" ./Temp/
|
||||
if (((Get-Date) - ((Get-Item ./Temp/$ldfName).LastWriteTime)).TotalMinutes -gt 5) {
|
||||
Write-Host "Error: $ldfName was not downloaded correctly."
|
||||
continue;
|
||||
}
|
||||
|
||||
#drop existing database
|
||||
DropDatabase $containerId $database $sqlPass;
|
||||
if ((IsDatabaseExists $containerId $database $sqlPass) -eq 'yes') {
|
||||
Write-Host "Error: $database still exists (drop error)"
|
||||
continue;
|
||||
}
|
||||
#copy new files
|
||||
CopyFile $containerId $mdfName
|
||||
CopyFile $containerId $ldfName
|
||||
#attach databases in container
|
||||
AttachDatabase $containerId $database $sqlPass $mdfName $ldfName;
|
||||
if ((IsDatabaseExists $containerId $database $sqlPass) -eq 'no') {
|
||||
Write-Host "Error: $database still not exists (attach error)"
|
||||
continue;
|
||||
}
|
||||
Write-Host "OK";
|
||||
});
|
||||
Write-Host "All databases restored!";
|
||||
Reference in New Issue
Block a user