เช เชฒเซเช เชธเชเชชเซเชฐเซเชฃเชชเชฃเซ เชตเซเชฏเชตเชนเชพเชฐเซ เชเซ เช เชจเซ เชฎเชพเชฐเซ เชฆเซเชเชเชฆ เชตเชพเชฐเซเชคเชพเชจเซ เชธเชฎเชฐเซเชชเชฟเชค เชเซ
เชฎเชพเชเซ เชคเซเชฏเชพเชฐ เชฅเช เชฐเชนเซเชฏเชพ เชเซ เชเซเชฐเซ เชเช PROD RDS (MS SQL) เชฎเชพเชเซ, เชเซเชจเชพ เชตเชฟเชถเซ เช เชฎเชพเชฐเชพ เชฌเชงเชพ เชเชพเชจ เชเซเชเชเชคเชพ เชนเชคเชพ, เชฎเซเช เชเชเซเชฎเซเชถเชจเชจเซเช เชเช เชชเซเชฐเซเชเชจเซเชเซเชถเชจ (POC - เชชเซเชฐเซเชซ เชเชซ เชเซเชจเซเชธเซเชชเซเช) เชเชฐเซเชฏเซเช: เชชเชพเชตเชฐเชถเซเชฒ เชธเซเชเซเชฐเชฟเชชเซเชเซเชธเชจเซ เชธเชฎเซเชน. เชชเซเชฐเชธเซเชคเซเชคเชฟ เชชเชเซ, เชเซเชฏเชพเชฐเซ เชคเซเชซเชพเชจเซ, เชฒเชพเชเชฌเซ เชคเชพเชณเซเช เชฎเซเชคเซเชฏเซ เชชเชพเชฎเซ, เช เชตเชฟเชฐเชค เชคเชพเชณเซเชเชฎเชพเช เชซเซเชฐเชตเชพเช, เชคเซเชฏเชพเชฐเซ เชคเซเชเช เชฎเชจเซ เชเชนเซเชฏเซเช - เช เชฌเชงเซเช เชธเชพเชฐเซเช เชเซ, เชชเชฐเชเชคเซ เชฎเชพเชคเซเชฐ เชตเซเชเชพเชฐเชฟเช เชเชพเชฐเชฃเซเชธเชฐ, เช เชฎเชพเชฐเชพ เชฌเชงเชพ เชเซเชจเชเชฟเชจเซเชธ เชเซเชฒเชพเชฎเซ Linux เชชเชฐ เชเชพเชฎ เชเชฐเซ เชเซ!
เชถเซเช เช เชถเชเซเชฏ เชเซ? เชตเชฟเชจเซเชกเซเชเชจเซ เชจเซเชเซเชฅเซ เชเชตเชพ เชเชฐเชฎ, เชฒเซเชฎเซเชช เชกเซเชฌเซเช เชฒเซ เช เชจเซ เชคเซเชจเซ เชฒเชฟเชจเชเซเชธ เชนเซเช เชณ เชชเชพเชตเชฐเชถเซเชฒเชจเซ เชเซเชฌ เช เชเชฐเชฎเซเชฎเชพเช เชเซเชเชเชพเชกเซ? เชถเซเช เช เชเซเชฐเซเชฐ เชจเชฅเซ?
เชฎเชพเชฐเซ เชฎเชพเชฐเซ เชเชพเชคเชจเซ เชคเชเชจเซเชเซเชจเชพ เช เชตเชฟเชเชฟเชคเซเชฐ เชธเชเชฏเซเชเชจเชฎเชพเช เชกเซเชฌเซ เชเชตเซเช เชชเชกเซเชฏเซเช. เช
เชฒเชฌเชคเซเชค, เชฎเชพเชฐเซ เชฌเชงเซ 30+ เชธเซเชเซเชฐเชฟเชชเซเชเซเช เชเชพเชฎ เชเชฐเชตเชพเชจเซเช เชฌเชเชง เชเชฐเซ เชฆเซเชงเซเช. เชฎเชพเชฐเชพ เชเชถเซเชเชฐเซเชฏ เชฎเชพเชเซ, เชฎเซเช เชเช เชเชพเชฐเซเชฏเชเชพเชฐเซ เชฆเชฟเชตเชธเชฎเชพเช เชฌเชงเซเช เช เซเช เชเชฐเชตเชพเชฎเชพเช เชตเซเชฏเชตเชธเซเชฅเชพเชชเชฟเชค เชเชฐเซเชฏเซเช. เชนเซเช เชเชฐเชฎ โโเช
เชจเซเชธเชเชงเชพเชจเชฎเชพเช เชฒเชเซเช เชเซเช. เชคเซ, เชชเชพเชตเชฐเชถเซเชฒ เชธเซเชเซเชฐเชฟเชชเซเชเซเชจเซ เชตเชฟเชจเซเชกเซเชเชฅเซ เชฒเชฟเชจเชเซเชธเชฎเชพเช เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค เชเชฐเชคเซ เชตเชเชคเซ เชคเชฎเซ เชเช เชฎเซเชถเซเชเซเชฒเซเชเชจเซ เชธเชพเชฎเชจเซ เชเชฐเซ เชถเชเซ เชเซ?
sqlcmd vs Invoke-SqlCmd
เชเชพเชฒเซ เชนเซเช เชคเชฎเชจเซ เชคเซเชฎเชจเซ เชตเชเซเชเซเชจเชพ เชฎเซเชเซเชฏ เชคเชซเชพเชตเชคเชจเซ เชฏเชพเชฆ เช เชชเชพเชตเซเชถ. เชธเชพเชฐเซ เชเซเชจเซ เชเชชเชฏเซเชเชฟเชคเชพ sqlcmd เชคเซ เชฒเชเชญเช เชธเชฎเชพเชจ เชเชพเชฐเซเชฏเชเซเชทเชฎเชคเชพ เชธเชพเชฅเซ, Linux เชนเซเช เชณ เชชเชฃ เชเชพเชฎ เชเชฐเซ เชเซ. เช เชฎเซ -Q, เชเชจเชชเซเช เชซเชพเชเชฒ -i เชคเชฐเซเชเซ เช เชจเซ เชเชเชเชชเซเช -o เชคเชฐเซเชเซ เชเชฒเชพเชตเชตเชพ เชฎเชพเชเซ เชเซเชตเซเชฐเซ เชชเชพเชธ เชเชฐเซเช เชเซเช. เชชเชฐเชเชคเซ เชซเชพเชเชฒ เชจเชพเชฎเซ, เช เชฒเชฌเชคเซเชค, เชเซเชธ-เชธเชเชตเซเชฆเชจเชถเซเชฒ เชฌเชจเชพเชตเชตเชพเชฎเชพเช เชเชตเซ เชเซ. เชเซ เชคเชฎเซ -i เชจเซ เชเชชเชฏเซเช เชเชฐเซ เชเซ, เชคเซ เชซเชพเชเชฒเชฎเชพเช เช เชเชคเซ เชฒเชเซ:
GO
EXIT
เชเซ เช เชเชคเซ เชเซเช เชเชเซเชเชฟเช เชจ เชนเซเชฏ, เชคเซ sqlcmd เชเชจเชชเซเชเชจเซ เชฐเชพเชน เชเซเชตเชพ เชฎเชพเชเซ เชเชเชณ เชตเชงเชถเซ, เช เชจเซ เชเซ เชชเชนเซเชฒเชพเช เชฌเชนเชพเชฐ เชจเซเชเชณเซ เชจเชนเซเช GO, เชชเชเซ เชเซเชฒเซเชฒเซ เชเชฆเซเชถ เชเชพเชฎ เชเชฐเชถเซ เชจเชนเซเช. เชเชเชเชชเซเช เชซเชพเชเชฒเชฎเชพเช เชคเชฎเชพเชฎ เชเชเชเชชเซเช, เชธเชฟเชฒเซเชเซเช, เชฎเซเชธเซเช, เชชเซเชฐเชฟเชจเซเช เชตเชเซเชฐเซเชจเซ เชธเชฎเชพเชตเซเชถ เชฅเชพเชฏ เชเซ.
Invoke-SqlCmd เชกเซเชเชพเชธเซเช, เชกเซเชเชพเชเซเชฌเชฒเซเชธ เช เชฅเชตเชพ เชกเซเชเชพเชฐเซ เชคเชฐเซเชเซ เชชเชฐเชฟเชฃเชพเชฎ เชเชคเซเชชเชจเซเชจ เชเชฐเซ เชเซ. เชคเซเชฅเซ, เชเซ เชคเชฎเซ เชธเชฐเชณ เชชเชธเชเชฆเชเซเชจเชพ เชชเชฐเชฟเชฃเชพเชฎ เชชเชฐ เชชเซเชฐเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชเซ, เชคเซ เชคเชฎเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ sqlcmd, เชคเซเชจเชพ เชเชเชเชชเซเชเชจเซเช เชตเชฟเชถเซเชฒเซเชทเชฃ เชเชฐเซเชฏเชพ เชชเชเซ, เชเชเชเช เชเชเชฟเชฒ เชฎเซเชณเชตเชตเซเช เชฒเชเชญเช เช เชถเชเซเชฏ เชเซ: เช เชฎเชพเชเซ เชคเซเชฏเชพเช เชเซ Invoke-SqlCmd. เชชเชฐเชเชคเซ เช เชเซเชฎเชจเชพ เชชเซเชคเชพเชจเชพ เชเซเชเซเชธ เชชเชฃ เชเซ:
- เชเซ เชคเชฎเซ เชคเซเชจเชพ เชฆเซเชตเชพเชฐเชพ เชซเชพเชเชฒ เชธเซเชฅเชพเชจเชพเชเชคเชฐเชฟเชค เชเชฐเซ เชเซ -เชเชจเชชเซเช เชซเชพเชเชฒเชชเชเซ เชฌเชนเชพเชฐ เชจเซเชเชณเซ เชเชฐเซเชฐเซ เชจเชฅเซ, เชตเชงเซเชฎเชพเช, เชคเซ เชตเชพเชเซเชฏเชฐเชเชจเชพ เชญเซเชฒ เชชเซเชฆเชพ เชเชฐเซ เชเซ
- -เชเชเชเชชเซเช เชซเชพเชเชฒ เชจเชพ, เชเชฆเซเชถ เชคเชฎเชจเซ เชเชฌเซเชเซเชเซเช เชคเชฐเซเชเซ เชชเชฐเชฟเชฃเชพเชฎ เชเชชเซ เชเซ
- เชธเชฐเซเชตเชฐเชจเซ เชเชฒเซเชฒเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชฌเซ เชตเชพเชเซเชฏเชฐเชเชจเชพ เชเซ: -เชธเชฐเซเชตเชฐเชเชจเซเชธเซเชเชจเซเชธ -เชตเชชเชฐเชพเชถเชเชฐเซเชคเชพ เชจเชพเชฎ -เชชเชพเชธเชตเชฐเซเชก -เชกเซเชเชพเชฌเซเช เช เชจเซ เชฎเชพเชฐเชซเชคเซ -เชเชจเซเชเซเชถเชจเชธเซเชเซเชฐเชฟเชเช. เชตเชฟเชเชฟเชคเซเชฐ เชฐเซเชคเซ, เชชเซเชฐเชฅเชฎ เชเชฟเชธเซเชธเชพเชฎเชพเช 1433 เชธเชฟเชตเชพเชฏเชจเชพ เชชเซเชฐเซเชเชจเซ เชเชฒเซเชฒเซเช เชเชฐเชตเซ เชถเชเซเชฏ เชจเชฅเซ.
- เชเซเชเซเชธเซเช เชเชเชเชชเซเช, PRINT เชฒเชเซ, เชเซ เชซเชเซเชค "เชชเชเชกเชพเชฏเซเชฒ" เชเซ sqlcmdเชฎเชพเชเซ Invoke-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 เชธเซเชเซเชฐเชฟเชชเซเชเชฎเชพเช เชเชชเชฃเซ เช เชตเซเชเซเชจเซ เชเชชเชฏเซเช เชเชฐเซเช เชเซเช:
set @spid=$(spid)
set @age=$(age)
เชคเซเชฅเซ เชคเซ เช เชนเซเช เชเซ. *เชจเชฟเชเซเชธ เชฎเชพเช เชเชฒ เช เชตเซเชเซ เชเชพเชฎ เชเชฐเชคเซเช เชจเชฅเซ. เชชเชฐเชฟเชฎเชพเชฃ -v เช เชตเชเชฃเชตเชพเชฎเชพเช เชฏเซ Invoke-SqlCmd เช เชตเชเชฃเชตเชพเชฎเชพเช -เชเชฒเซ. เชเซ เชเซ เชชเชฐเชฟเชฎเชพเชฃ เชเซ เชเซ เชเชฒเซเชจเซ เชชเซเชคเชพเชจเซ เชธเซเชชเชทเซเช เชเชฐเซ เชเซ เชคเซเชจเซ เช เชตเชเชฃเชตเชพเชฎเชพเช เชเชตเซ เชเซ, เช เชตเซเชเซ เชชเซเชคเซ เชเชพเชฐเซเชฏ เชเชฐเซ เชเซ - เชคเชฎเซ เชถเซเชฒเชฎเชพเชเชฅเซ เชเซเชเชชเชฃ เชเชฒเซเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ. เชเซ เชเซ, เชนเซเช เชตเซเชฐเชฟเชฏเซเชฌเชฒเซเชธเชฅเซ เชจเชพเชฐเชพเช เชนเชคเซ เช เชจเซ เชฎเซเช เชคเซเชฎเชจเชพ เชชเชฐ เชฌเชฟเชฒเชเซเชฒ เชจเชฟเชฐเซเชญเชฐ เชจ เชฐเชนเซเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช, เช เชจเซ เชเชธเชเซเชฏเซเชเชฒ เชธเซเชเซเชฐเชฟเชชเซเช เชเซเชเชเซ เชนเซเชตเชพเชจเซ เชเชพเชฐเชฃเซ เช เชธเชญเซเชฏ เช เชจเซ เชเชฆเชฟเชฎ เชตเชฐเซเชคเชจ เชเชฐเซเชฏเซเช:
# 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"
เช, เชเซเชฎ เชคเชฎเซ เชธเชฎเชเซ เชเซ, เชคเซ เชฏเซเชจเชฟเชเซเชธ เชธเชเชธเซเชเชฐเชฃเชฎเชพเชเชฅเซ เชชเชนเซเชฒเซเชฅเซ เช เชเช เชชเชฐเซเชเซเชทเชฃ เชเซ.
เชซเชพเชเชฒเซ เช เชชเชฒเซเชก เชเชฐเซ เชฐเชนเซเชฏเชพเช เชเซเช
เชตเชฟเชจเซเชกเซเช เชธเชเชธเซเชเชฐเชฃเชฎเชพเช, เชเซเชเชชเชฃ เชเชชเชฐเซเชถเชจ เชเชกเชฟเช เชธเชพเชฅเซ เชนเชคเซเช: เช เชฎเซ sqlcmd เชเชฒเชพเชตเซเชฏเซเช, เชเชเชเชชเซเช เชซเชพเชเชฒเชฎเชพเช เชเซเช เชชเซเชฐเชเชพเชฐเชจเซ เชฆเซเชฐเซเชชเชฏเซเช เชฎเชณเซเชฏเซ, เช เชซเชพเชเชฒเชจเซ เชเชกเชฟเช เชชเซเชฒเซเช เชธเชพเชฅเซ เชเซเชกเซ เชฆเซเชงเซ. เชธเชฆเชจเชธเซเชฌเซ, SQL เชธเชฐเซเชตเชฐ เชเซเชจเชเชฟเชจเซเชธ เชเซเชตเชพ เช เชธเชฐเซเชตเชฐ เชชเชฐ เชเชพเชฎ เชเชฐเซ เชเซ, เชคเซ เชเชจเชพ เชเซเชตเซเช เชเชเชเช เชเชฐเชตเชพเชฎเชพเช เชเชตเซเชฏเซเช เชนเชคเซเช:
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(max) เชซเซเชฒเซเชกเชฎเชพเช เชฒเช เชเชเช เชเซเช. เช เชฒเชฌเชคเซเชค, เช เชเชเซ เชธเชฟเชธเซเชเชฎ เช เชฒเช เชชเชกเซ เชเช, เชเชพเชฐเชฃ เชเซ 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()
}
เชธเชพเชฎเชเซเชฐเซ เชชเชธเชเชฆ เชเชฐเชตเชพ เชฎเชพเชเซ, เชคเชฎเชพเชฐเซ ID เชฆเซเชตเชพเชฐเชพ เชชเชธเชเชฆ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ, เชเซเชฐเชฎเชฎเชพเช n (เชเชณเช) เชชเชธเชเชฆ เชเชฐเซเชจเซ.
เชเชเชณเชจเชพ เชฒเซเชเชฎเชพเช เชนเซเช เช เชฌเชงเซเช เชเซเชจเชเชฟเชจเซเชธ เชธเชพเชฅเซ เชเซเชตเซ เชฐเซเชคเซ เชเซเชฐเชฟเชฏเชพเชชเซเชฐเชคเชฟเชเซเชฐเชฟเชฏเชพ เชเชฐเซ เชเซ เชคเซ เชตเชฟเชถเซ เชตเชงเซ เชตเชฟเชเชคเชฎเชพเช เชเชเชถ.
เชธเซเชฐเซเชธ: www.habr.com