เบเบปเบโเบเบงเบฒเบกโเบเบตเปโเปเบเบฑเบโเบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเบขเปเบฒเบโเบเบฝเบงโเปเบฅเบฐโเบญเบธโเบเบดเบโเบเบปเบโเปเบเบทเปเบญโเปเบฅเบทเปเบญเบโเบเบตเปโเปเบชเบโเปเบชเบปเปเบฒโเบเบญเบโเบเปเบฒโเบเบฐโเปเบเบปเปเบฒโ
เบเบฒเบเบเบฝเบกเบเปเบญเบกเบชเปเบฒเบฅเบฑเบ Zero Touch PROD เบชเปเบฒเบฅเบฑเบ RDS (MS SQL), เบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบตเปเบซเบนเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบฑเบเบซเบกเบปเบเปเบกเปเบ buzzing, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเปเบฒเบชเบฐเปเบซเบเบต (POC - เบซเบผเบฑเบเบเบฒเบเบชเบฐเปเบเบเปเบเบงเบเบงเบฒเบกเบเบดเบ) เบญเบฑเบเบเบฐเปเบเบกเบฑเบ: เบเบธเบเบเบญเบ powershell scripts. เบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเปเบฒเบชเบฐเปเบซเบเบต, เปเบเปเบงเบฅเบฒเบเบตเปเบฅเบปเบกเบเบฒเบเบธ, เบชเบฝเบเบเบปเบเบกเบทเบเบตเปเบเบฒเบงเบเบฒเบเปเบเปเปเบชเบเบเบตเบงเบดเบเบฅเบปเบ, เบเบฒเบเปเบเบฑเบเบชเบฝเบเบเบปเบเบกเบทเบเบตเปเบเปเปเบขเบธเบเบขเบฑเปเบ, เบเบงเบเปเบเบปเบฒเบเบญเบเบเปเบญเบ - เบเบฑเบเบซเบกเบปเบเบเบตเปเปเบกเปเบเบเบต, เปเบเปเบงเปเบฒเบเบฝเบเปเบเปเบชเปเบฒเบฅเบฑเบเปเบซเบเบเบปเบเบเบฒเบเบญเบธเบเบปเบกเบเบฒเบ, เบเบฒเบ Jenkins เบเบฑเบเบซเบกเบปเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบ Linux!
เบญเบฑเบเบเบตเปเปเบเบฑเบเปเบเปเบเปเบเป? เปเบญเบปเบฒเบซเบฅเบญเบเปเบ DBA เบเบตเปเบญเบปเบเบญเบธเปเบเบเบฒเบเบเบฒเบเปเบเป Windows เปเบฅเบฐเบเบดเบเบกเบฑเบเบขเบนเปเปเบเบเบงเบฒเบกเบฎเปเบญเบเบเบญเบ powershell เบเบฒเบเปเบเป Linux? เบเบตเปเบเปเปเปเบกเปเบเบเบงเบฒเบกเปเบซเบเบฎเปเบฒเบเบเป?
เบเปเบฒโเบเบฐโเปเบเบปเปเบฒโเปเบเปโเบเบฑเบโเบเบปเบงโเปเบญเบโเปเบโเบเบฒเบโเบเบฐโเบชเบปเบกโเบเบฐโเบชเบฒเบโเบเบตเปโเปเบเบโเบเบญเบโเปเบเบฑเบโเปเบโเปเบฅโเบเบตโเบเบตเป. เปเบเปเบเบญเบ, เบชเบฐเบเบฃเบดเบเบเบฑเบเปเบปเบ 30+ เบเบญเบเบเปเบญเบเบขเบธเบเปเบฎเบฑเบเบงเบฝเบ. เปเบเบทเปเบญเบเบงเบฒเบกเปเบเบเปเบเบเบญเบเบเปเบญเบ, เบเปเบญเบเปเบเปเปเบเปเปเบเบเบธเบเบขเปเบฒเบเปเบเบกเบทเปเปเบฎเบฑเบเบงเบฝเบ. เบเปเบญเบเบเปเบฒเบฅเบฑเบเบเบฝเบเปเบเบเบฒเบเบเบปเปเบเบซเบฒเบฎเปเบญเบ. เบเบฑเปเบเบเบฑเปเบ, เปเบเบปเปเบฒเบชเบฒเบกเบฒเบเบเบปเบเบญเบธเบเบฐเบชเบฑเบเบญเบฑเบเปเบเปเบเปเบงเบฅเบฒเปเบญเบ script powershell เบเบฒเบ Windows เปเบ Linux?
sqlcmd เบเบฝเบเบเบฑเบ Invoke-SqlCmd
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเบเบทเบญเบเบเปเบฒเบเบเปเบฝเบงเบเบฑเบเบเบงเบฒเบกเปเบเบเบเปเบฒเบเบเบปเปเบเบเปเบฅเบฐเบซเบงเปเบฒเบเบเบงเบเบกเบฑเบ. เบเบฐเปเบซเบเบเปเบเบปเปเบฒเบเบต sqlcmd เบกเบฑเบเบเบฑเบเปเบฎเบฑเบเบงเบฝเบเบเบฒเบเปเบเป Linux, เบกเบตเบซเบเปเบฒเบเบตเปเปเบเบทเบญเบเบเบทเบเบฑเบ. เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบเบฒเบเบชเบญเบเบเบฒเบกเปเบเบทเปเบญเบเบฐเบเบดเบเบฑเบ -Q, เปเบเบฅเปเบเปเบญเบเบเปเปเบกเบนเบเปเบเบฑเบ -i, เปเบฅเบฐเบเบปเบเบเบฐเบฅเบดเบเปเบเบฑเบ -o. เปเบเปเบเบทเปเปเบเบฅเป, เปเบเปเบเบญเบ, เบเบทเบเบชเปเบฒเบเปเบเบฑเบเบเบปเบงเบเบดเบกเบเปเบญเบ. เบเปเบฒเบเปเบฒเบเปเบเป -i, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเปเบเปเบเบฅเปเบเบฝเบเบขเบนเปเบเปเบฒเบ:
GO
EXIT
เบเปเบฒเบเปเปเบกเบต EXIT เปเบเบเบญเบเบเปเบฒเบ, sqlcmd เบเบฐเบเปเบฒเปเบเบตเบเบเบฒเบเบฅเปเบเปเบฒเบเบฒเบเบเปเบญเบเบเปเปเบกเบนเบ, เปเบฅเบฐเบเปเบฒเบเปเบญเบ เบญเบญเบ เบเบฐเบเปเป GO, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเปเบฒเบชเบฑเปเบเบชเบธเบเบเปเบฒเบเบเบฐเบเปเปเปเบฎเบฑเบเบงเบฝเบ. เปเบเบฅเปเบเบปเบเบเบฐเบฅเบดเบเบเบฐเบเบญเบเบเปเบงเบเบเบปเบเบเบฐเบฅเบดเบเบเบฑเบเบซเบกเบปเบ, เปเบฅเบทเบญเบ, เบเปเปเบเบงเบฒเบก, เบเบดเบก, เปเบฅเบฐเบญเบทเปเบเป.
Invoke-SqlCmd เบเบฐเบฅเบดเบเบเบปเบเปเบเปเบฎเบฑเบเปเบเบฑเบ DataSet, DataTables เบซเบผเบท DataRows. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเปเบฒเบเบเบธเบเปเบเปเบเบเบปเบเปเบเปเบฎเบฑเบเบเบญเบเบเบฒเบเปเบฅเบทเบญเบเปเบเบเบเปเบฒเบเป, เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเป sqlcmd, เปเบเบเปเบเปเบงเบดเปเบเบฒเบฐเบเบปเบเบเบฐเบฅเบดเบเบเบญเบเบกเบฑเบ, เบกเบฑเบเปเบเบทเบญเบเปเบเบฑเบเปเบเบเปเปเปเบเปเบเบตเปเบเบฐเปเบญเบปเบฒเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบเบตเปเบชเบฑเบเบชเบปเบ: เบชเปเบฒเบฅเบฑเบเบเบตเปเบกเบต เบฎเบฝเบเบฎเปเบญเบ-SqlCmd. เปเบเปเบเบตเบกเบเบฒเบเบเบตเปเบเบฑเบเบกเบตเปเบฅเบทเปเบญเบเบเบฐเบซเบฅเบปเบเบเบญเบเบเบปเบเปเบญเบ:
- เบเปเบฒเบเปเบฒเบเปเบญเบเปเบเบฅเปเปเบเบซเบฒเบเบฒเบเบเปเบฒเบ -InputFile, เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบญเบญเบ เบเปเปเบเปเบฒเปเบเบฑเบ, เบเบญเบเบเบฒเบเบเบฑเปเบ, เบกเบฑเบเปเบฎเบฑเบเปเบซเปเปเบเบตเบเบเบงเบฒเบกเบเบดเบเบเบฒเบ syntax
- -OutputFile เบเปเป, เบเปเบฒเบชเบฑเปเบเบชเบปเปเบเบเบทเบเบเบปเบเปเบเปเบฎเบฑเบเปเบซเปเบเปเบฒเบเปเบเบฑเบเบงเบฑเบเบเบธ
- เบกเบตเบชเบญเบ syntax เบชเปเบฒเบฅเบฑเบเบเบฒเบเบฅเบฐเบเบธเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ: -ServerInstance -เบเบทเปเบเบนเปเปเบเป -Password -Database เปเบฅเบฐเบเปเบฒเบ -ConnectionString. Oddly เบเบฝเบเบเป, เปเบเบเปเบฅเบฐเบเบตเบเปเบฒเบญเบดเบเบกเบฑเบเบเปเปเบชเบฒเบกเบฒเบเบเบตเปเบเบฐเบฅเบฐเบเบธเบเบญเบเบญเบทเปเบเบเบญเบเปเบซเบเบทเบญเบเบฒเบ 1433.
- เบเบปเบเบเบฐเบฅเบดเบเบเปเปเบเบงเบฒเบก, เบเบดเบก PRINT, เปเบเบดเปเบเบเบฝเบเปเบเป "เบเบฑเบเปเบเป" sqlcmdเบชเบณ เบฅเบฑเบ เบฎเบฝเบเบฎเปเบญเบ-SqlCmd
เปเบเบฑเบเบเบฑเบเบซเบฒ - เปเบฅเบฐเบชเปเบฒเบเบฑเบเบเบตเปเบชเบธเบ:
เบชเปเบงเบเบซเบผเบฒเบเบญเบฒเบเบเบฐ Linux เบเบญเบเบเปเบฒเบเบเปเปเบกเบต 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 script เบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฒเบเบเบปเบเปเบเบ:
set @spid=$(spid)
set @age=$(age)
เบเบฑเปเบเบเบฑเปเบเปเบเบเบตเปเบเบตเปเบกเบฑเบเปเบกเปเบ. เปเบ *nix เบเบฒเบเบเปเบฝเบเปเบเบเบเบปเบงเปเบเบเปเปเปเบฎเบฑเบเบงเบฝเบ. เบเบฒเบฅเบฒเบกเบดเปเบเบต -v เบเปเปเบชเบปเบเปเบ. U เบฎเบฝเบเบฎเปเบญเบ-SqlCmd เบเปเปเบชเบปเบเปเบ - เบเบปเบงเปเบ. เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบปเบงเบเปเบฒเบเบปเบเบเบฒเบเบเบตเปเบเปเบฒเบเบปเบเบเบปเบงเปเบเบเบญเบเบเบปเบงเบกเบฑเบเปเบญเบเบเบฐเบเบทเบเบฅเบฐเปเบงเบฑเปเบ, เบเบฒเบเบเบปเบเปเบเบเบเบปเบงเบกเบฑเบเปเบญเบเปเบฎเบฑเบเบงเบฝเบ - เบเปเบฒเบเบชเบฒเบกเบฒเบเบเปเบฒเปเบเปเบเบปเบงเปเบเปเบเปเบเบฒเบ Shell. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบฎเบนเปเบชเบถเบเบเบดเบเบซเบงเบฑเบเบเบฑเบเบเบปเบงเปเบเปเบฅเบฐเบเบฑเบเบชเบดเบเปเบเบเบตเปเบเบฐเบเปเปเบเบถเปเบเบเบฑเบเบเบงเบเบกเบฑเบเบเบฑเบเบซเบกเบปเบ, เปเบฅเบฐเบเบฐเบเบดเบเบฑเบเบขเปเบฒเบเปเบซเบเบฎเปเบฒเบเปเบฅเบฐเปเบเบทเปเบญเบเบเบปเปเบ, เปเบเบฒเบฐเบงเปเบฒ SQL scripts เบชเบฑเปเบ:
# 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.
เบเบณ เบฅเบฑเบเบญเบฑเบเปเบซเบผเบเปเบเบฅ
เปเบเบชเบฐเบเบฑเบ Windows, เบเบฒเบเบเปเบฒเปเบเบตเบเบเบฒเบเปเบเปเปเบกเปเบเบกเบฒเบเปเบญเบกเบเบฑเบเบเบฒเบเบเบงเบเบชเบญเบ: เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบตเบเบเบฒเบ 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 เบเบฑเบเบซเบกเบปเบเปเบฅเบฐ shove เบกเบฑเบเปเบเบปเปเบฒเปเบเปเบเบเบฒเบเบชเบฐเบซเบเบฒเบก nvarchar (max) เบเบญเบเบเบฒเบเบฐเบฅเบฒเบเบเบฒเบเบเบงเบเบชเบญเบ. เปเบเปเบเบญเบ, เบฅเบฐเบเบปเบเบเบฑเบเบซเบกเบปเบเบเบตเปเปเบเปเปเบเบเปเบเบ, เปเบเบฒเบฐเบงเปเบฒเปเบเบเบเบตเปเบเบฐเปเบเบฑเบเปเบเบทเปเบญเบเปเบกเปเบเปเบฒเบ SQL เบเปเบญเบเปเบเปเบฎเบฑเบ RDS, เปเบฅเบฐ BULK INSERT เบเปเปเปเบเปเปเบฎเบฑเบเบงเบฝเบเบเบฑเบเบซเบกเบปเบเปเบเบเบเปเบฒเบ UNC เปเบเบทเปเบญเบเบเบฒเบเบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเบเบตเปเบเบฐเบฅเบฑเบญเบเปเบเบฅเป, เปเบฅเบฐ RDS เปเบเบเบเบปเปเบงเปเบเปเบฅเปเบงเบเบตเปเปเบกเปเบ doomed เบเบฒเบ. เบเบฒเบเปเบฅเบตเปเบกเบเบปเปเบ. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฑเบเบชเบดเบเปเบเบเบตเปเบเบฐเบเปเบฝเบเบเบฒเบเบญเบญเบเปเบเบเบฅเบฐเบเบปเบ, เปเบเบฑเบเบฎเบฑเบเบชเบฒเบเบฒเบเบเบงเบเบชเบญเบเปเบเบเบชเบฒเบ:
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()
}
เปเบเบทเปเบญเปเบฅเบทเบญเบเปเบเบทเปเบญเบซเบฒ, เบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฅเบทเบญเบเปเบเบ ID, เปเบฅเบทเบญเบเปเบเบเปเบฒเบชเบฑเปเบ n (เบเบปเบงเบเบปเบ).
เปเบเบเบปเบเบเบงเบฒเบกเบเปเปเปเบเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบกเบเปเบฝเบงเบเบฑเบเบงเบดเบเบตเบเบฒเบเบเบฑเบเบซเบกเบปเบเบเบตเปเบเบปเบงเบเบฑเบเบเบฑเบ Jenkins.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com