α’ααααααααααΊααΆααααααααα»αααααΆα α αΎαααααΌαααΆαα§αααα·ααααααΏαααααα αααααααα»α
ααΆαααααααααα½ααααααΆαα Zero Touch PROD αααααΆαα RDS (MS SQL) αααβαααα ααβααααβααΎαβααΆααβα’ααβαααα»αβααβααΆααβααα αααα»αβααΆαβααααΎβααβαααα αΆα (POC - Proof Of Concept) ααβααααααααααααα·ααααα αααα»αβααβααααααΈα powershellα αααααΆααααΈααΆαααααΎαααααα αΆα αα ααααααααααααααα»α ααα‘ααααααα’αΌααααααΆαααΆαααΆαααααααΈαα·α αααααα ααΆααΆαα’αα’αααΆααα₯αααααα αα½αααααΆαααααΆαααααα»αααΆ ααΆααα’αααααααα’ ααα»αααααααααΆααααα ααα»ααααααααα·ααααΆααα»ααααα ααΆααα Jenkins ααΆααα’ααααααααΎαααααΎααΆαααΎααΈαα»α !
ααΎαααα’αΆα αα αα½α αα? ααα ααααα DBA ααΈααααα Windows α αΎααα·αααΆαααα»ααααα ααααΆαααα powershell αα αααααααΈαα»α ? ααΎααααα·αααααα ααα¬?
αααα»αααααΌαααααααα»ααααα½ααααα»ααα
αααα»αααΆααα½ααααα
αΌαααααΆααα
ααααααααα
αα
αααα·ααααΆαααα ααΆααΆααα·αααΆαα ααααααΈα 30+ αααααααα»αααΆααα’ααααΆααααααααΎαααΆαα ααΆααΆαααααΆααααα’αΎααααααααα»α αααα»αααΆααα½ααα»αα’αααΈαααααααααΆααααα»ααααααααα½αααααααααΎααΆαα αααα»αβαααα»αβαααααβαααα»αβααΆαβαααααααβαααα
α ααΌα
αααα ααΎα’αααα’αΆα
αα½αααααααααα αΆα’αααΈαααααα
ααααααααααααααΈα powershell ααΈ Windows αα
Linux?
sqlcmd αααααΉα Invoke-SqlCmd
αααα»αααΌαααααΉαα’αααα’αααΈααΆααα»αααααΆααααΆαααααΆααα½αααα α§αααααα αΆααααα’α sqlcmd ααΆααααααΎαααΆααα αααααααΈαα»α ααααα ααΆαα½αααΉααα»αααΆαααααΎαααααΌα ααααΆααααα·αα ααΎαααααααΆαααααα½αααΎααααΈααααα·ααααα· -Q α―αααΆααααα αΌαααΆ -i αα·αααααααααΆ -o α ααα»ααααβααΆβααΆαβαα·αβααΆααβαααααβα―αααΆαβααααΌαβααΆαβαααααΎαβααΆβα’ααααβααΌα βααα ααααα·αααΎα’αααααααΎ -i αααααΆαααααα αααα»αα―αααΆαααααααα α α»ααααα αα:
GO
EXIT
ααααα·αααΎαα·αααΆα EXIT αα α α»ααααα ααααααα sqlcmd ααΉααααααααα αΆαααΆααααα αΌα α αΎαααααα·αααΎαα»αα α αΆαα αα ααΉααα·α GOαααααΆααααααΆααααααααΆα α»ααααααααΉααα·αααααΎαααΆαααα α―αααΆαααααααααΆαααααααααΆααα’αα ααααΎαααΎα ααΆα ααααα»αααααα
Invoke-SqlCmd αααααΎαααααααααΆ DataSet, DataTables α¬ DataRows α ααΌα ααααααααα·αααΎα’αααααααΎαααΆαααααααααααΆαααααΎαααΎαααΆααααα’αααα’αΆα ααααΎ sqlcmdαααααΆααααααααααααααααΆ ααΆααααΎααααα·αα’αΆα ααα½αααΆαα’αααΈααααααα»αααααΆαα αααααΆααααΆααΆα α α -SqlCmd. ααα»αααααααα»ααααααααΆαααΏααααααααααααΆαααααα½ααααααα
- ααααα·αααΎα’ααααααααα―αααΆααα ααΆαααΆαααα - α―αααΆααααα αΌααααααΆαααα α αΆαα αα αα·αα αΆαααΆα α ααΎαααΈααα ααΆαααααΎαααα α»αααΆααααααααααα
- - α―αααΆααααααα αα ααΆααααααααΆααΉααααα‘ααα’αααααΌαααααααααΆααααα»αα½αα
- ααΆαααΆαααααααααααααΈααααααΆαααααααΆαααααΆαααΈαααα -ServerInstance -αααααα’αααααααΎααααΆαα -Password -Database αα·αααΆαααα - ααΆααααααΆααααααα’αααα. α ααααααααααααααΆααα αΎα αααα»αααααΈααααΌαααΆαα·αα’αΆα αααααΆααα ααααααα ααΈ 1433 ααΆαααα
- ααααααα’ααααα ααΆα PRINT αααααααΆαααα "α
αΆααααΆα" sqlcmdαααααΆαα α α
-SqlCmd
ααΊααΆαααα αΆ - α αΎαααααΆαααααα»αα
ααΆαα αααΎαααααααΆααΈαα»α ααααα’ααααα·αααΆα cmdlet ααααα!
α αΎααααααΊααΆαααα αΆα
ααααα ααΆααααα
αααα»αααααΈααΆααα cmdlet
ααΆααααα½αα’ααα
sqlcmd ααΆαααΆααααα½αα’ααααααααααΎ -v α§ααΆα αααααΌα αααα
# $conn ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π°ΡΠ°Π»ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ sqlcmd
$cmd = $conn + " -i D:appsSlaveJobsKillSpid.sql -o killspid.res
-v spid =`"" + $spid + "`" -v age =`"" + $age + "`""
Invoke-Expression $cmd
αα αααα»αααααααΈα SQL ααΎαααααΎααΆααααα½αα
set @spid=$(spid)
set @age=$(age)
ααΌα αααααα ααΈαααα αα αααα»α * nix ααΆααααα½αα’ααααα·αααααΎαααΆαααα. αααΆαααΆαααααα -v αα·αα’αΎααΎα ααΌ α α -SqlCmd αα·αα’αΎααΎ - α’ααα. αααααΈααΆαααΆαααΆααααααααααααααΆααα’ααααααα½αα―ααα·αααααΌαααΆαα’αΎααΎααααα ααΆααααα½ααααα½αα―αααααΎαααΆα - α’αααα’αΆα ααααΎα’αααααΆαα½αααΈαααα αααααΆαααΆαααΆααααα αααα»αααΆαααΆαα’αΆααα’ααα α·αααα ααααα’ααα α αΎαααΆααααααα α α·ααααα·αααΉαααα’ααααΎαα½αααΆααΆααααααα α αΎαααΆααααααααΉααααααααααΎα αα·αααΎα αααααΆαααααααΈα SQL ααααΈα
# prepend the parameters
"declare @age int, @spid int" | Add-Content "q.sql"
"set @spid=" + $spid | Add-Content "q.sql"
"set @age=" + $age | Add-Content "q.sql"
foreach ($line in Get-Content "Sqlserver/Automation/KillSpid.sql") {
$line | Add-Content "q.sql"
}
$cmd = "/opt/mssql-tools/bin/" + $conn + " -i q.sql -o res.log"
ααΌα αααα’αααααα αααααΊααΆααΆαααΆααααααα½α α αΎαααΈαααα Unix α
αααα»ααααα»αα―αααΆα
αα αααα»αααααααΈαααΌ ααααα·ααααα·ααΆαααΆαα½αααααΌαααΆαα’ααααααααααααα½αα ααΎαααααΎαααΆα sqlcmd ααΆαααα½αααΆαααααΆααα½αα ααα½ααα αααα»αα―αααΆααααααα ααααΆααα―αααΆαααααα α αΆααααααααα ααΆααααΆαααα’ αααΆαααΈααα SQL ααααΎαααΆαααΎαααΆαααΈαααααΌα ααααΆααΆαα½α Jenkins ααΆααααΌαααΆαααααΎααΌα αααα
CREATE procedure AuditUpload
@id int, @filename varchar(256)
as
set nocount on
declare @sql varchar(max)
CREATE TABLE #multi (filer NVARCHAR(MAX))
set @sql='BULK INSERT #multi FROM '''+@filename
+''' WITH (ROWTERMINATOR = '' '',CODEPAGE = ''ACP'')'
exec (@sql)
select @sql=filer from #multi
update JenkinsAudit set multiliner=@sql where ID=@id
return
ααΌα αααα ααΎααααα―αααΆα BCP ααΆαααααα»α α αΎααα»αααΆαα αααα»αααΆα nvarchar(α’αα·ααααΆ) ααααΆααΆααααααααα ααΆααΆααα·αααΆαα ααααααααααΆααααΌααααααΆααα½αααααααααΆααααααα½αα±αααααΆαααΈααα SQL ααααααα»αααα½αααΆα RDS α αΎα BULK INSERT αα·αααααΎαααΆαααΆαααααααααΆαααα UNC αααααΆαααααΆαααα»ααααααΎααααΈα αΆααααααααΆα ααα»αααΎα―αααΆααα½α α αΎαααΆαα½α RDS αααααΆααΌαα ααααΌαααΆαααααααΆαααΈ ααΆαα αΆααααααΎααααΆαααααΆααα ααΌα αααα αααα»αβααΆαβαααααα βα α·αααβααααΆααααααΌαβααΆαβαα ααΆβαααααααα αααβαααααΆβαααααΆααβαααααααβααΆαβαααααΆααα
CREATE TABLE AuditOut (
ID int NULL,
TextLine nvarchar(max) NULL,
n int IDENTITY(1,1) PRIMARY KEY
)
α αΎαααααααααα»αααΆααΆαααΌα αααα
function WriteAudit([string]$Filename, [string]$ConnStr,
[string]$Tabname, [string]$Jobname)
{
# get $lastid of the last execution -- ΠΏΡΠΎΡΠΊΠΈΠΏΠ°Π½ΠΎ Π΄Π»Ρ ΡΡΠ°ΡΡΠΈ
#create grid and populate it with data from file
$audit = Get-Content $Filename
$DT = new-object Data.DataTable
$COL1 = new-object Data.DataColumn;
$COL1.ColumnName = "ID";
$COL1.DataType = [System.Type]::GetType("System.Int32")
$COL2 = new-object Data.DataColumn;
$COL2.ColumnName = "TextLine";
$COL2.DataType = [System.Type]::GetType("System.String")
$DT.Columns.Add($COL1)
$DT.Columns.Add($COL2)
foreach ($line in $audit)
{
$DR = $dt.NewRow()
$DR.Item("ID") = $lastid
$DR.Item("TextLine") = $line
$DT.Rows.Add($DR)
}
# write it to table
$conn=new-object System.Data.SqlClient.SQLConnection
$conn.ConnectionString = $ConnStr
$conn.Open()
$bulkCopy = new-object ("Data.SqlClient.SqlBulkCopy") $ConnStr
$bulkCopy.DestinationTableName = $Tabname
$bulkCopy.BatchSize = 50000
$bulkCopy.BulkCopyTimeout = 0
$bulkCopy.WriteToServer($DT)
$conn.Close()
}
ααΎααααΈααααΎαααΎαααααΉαααΆα α’αααααααΌαααααΎαααΎαααΆαααααααααΆαα αααααααΎαααΎαααΆαααααΆαα n (α’ααααααααΆα)α
αα
αααα»αα’ααααααααααΆαα αααα»αααΉααααααΆαααααα’α·ααααααααααα’αααΈαααααααααΆααα’αααααααΆαα’ααααααααααΆαα½α Jenkins α
ααααα: www.habr.com