Π’Π°Π·ΠΈ ΡΡΠ°ΡΠΈΡ Π΅ ΡΠΈΡΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ° ΠΈ Π΅ ΠΏΠΎΡΠ²Π΅ΡΠ΅Π½Π° Π½Π° ΠΌΠΎΡΡΠ° ΡΡΠΆΠ½Π° ΠΈΡΡΠΎΡΠΈΡ
ΠΠΎΠ΄Π³ΠΎΡΠ²ΡΠΌ ΡΠ΅ Π·Π° Zero Touch PROD Π·Π° RDS (MS SQL), Π·Π° ΠΊΠΎΠΉΡΠΎ Π²ΡΠΈΡΠΊΠΈ Π½ΠΈ Π±ΡΡΠΌΡΠ°Ρ Π° Π² ΡΡΠΈΡΠ΅, Π½Π°ΠΏΡΠ°Π²ΠΈΡ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ (POC - Proof Of Concept) Π½Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΡΡΠ°: Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ Π½Π° powershell. Π‘Π»Π΅Π΄ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡΡΠ°, ΠΊΠΎΠ³Π°ΡΠΎ Π±ΡΡΠ½ΠΈΡΠ΅, ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅Π»Π½ΠΈ Π°ΠΏΠ»ΠΎΠ΄ΠΈΡΠΌΠ΅Π½ΡΠΈ ΡΡΠΈΡ Π½Π°Ρ Π°, ΠΏΡΠ΅Π²ΡΡΡΠ°ΠΉΠΊΠΈ ΡΠ΅ Π² Π½Π΅ΠΏΡΠ΅ΡΡΠ°Π½Π½ΠΈ Π°ΠΏΠ»ΠΎΠ΄ΠΈΡΠΌΠ΅Π½ΡΠΈ, ΡΠ΅ ΠΌΠΈ ΠΊΠ°Π·Π°Ρ Π° - Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° Π΅ Π΄ΠΎΠ±ΡΠ΅, Π½ΠΎ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΠΈΠ΄Π΅ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ, Π²ΡΠΈΡΠΊΠΈ Π½Π°ΡΠΈ ΡΠΎΠ±ΠΈ Π½Π° ΠΠΆΠ΅Π½ΠΊΠΈΠ½Ρ ΡΠ°Π±ΠΎΡΡΡ Π½Π° Linux!
ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ Π΅ ΡΠΎΠ²Π°? ΠΠ·Π΅ΠΌΠ΅ΡΠ΅ ΡΠ°ΠΊΡΠ² ΡΠΎΠΏΡΠ», Π»Π°ΠΌΠΏΠΎΠ² DBA ΠΎΡ ΠΏΠΎΠ΄ Windows ΠΈ Π³ΠΎ ΠΏΡΡ Π½Π΅ΡΠ΅ Π² ΡΠ°ΠΌΠ°ΡΠ° ΡΠΎΠΏΠ»ΠΈΠ½Π° Π½Π° powershell ΠΏΠΎΠ΄ Linux? Π’ΠΎΠ²Π° Π½Π΅ Π΅ Π»ΠΈ ΠΆΠ΅ΡΡΠΎΠΊΠΎ?
Π’ΡΡΠ±Π²Π°ΡΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠΎΠΏΡ Π² ΡΠ°Π·ΠΈ ΡΡΡΠ°Π½Π½Π° ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΎΡ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ. Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΠΌΠΈ Π½Π°Π΄ 30 ΡΠΊΡΠΈΠΏΡΠ° ΡΠΏΡΡΡ
Π° Π΄Π° ΡΠ°Π±ΠΎΡΡΡ. ΠΠ° ΠΌΠΎΡ ΠΈΠ·Π½Π΅Π½Π°Π΄Π° ΡΡΠΏΡΡ
Π΄Π° ΠΎΠΏΡΠ°Π²Ρ Π²ΡΠΈΡΠΊΠΎ Π·Π° Π΅Π΄ΠΈΠ½ ΡΠ°Π±ΠΎΡΠ΅Π½ Π΄Π΅Π½. ΠΠΈΡΠ° ΠΏΠΎ Π³ΠΎΡΠ΅ΡΠΈ ΡΠ»Π΅Π΄ΠΈ. Π ΡΠ°ΠΊΠ°, ΠΊΠ°ΠΊΠ²ΠΈ ΠΊΠ»ΠΎΠΏΠΊΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΡΠ΅ΡΠ½Π΅ΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΡΠ΅Ρ
Π²ΡΡΠ»ΡΡΠ΅ Powershell ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ ΠΎΡ Windows ΠΊΡΠΌ Linux?
sqlcmd ΡΡΠ΅ΡΡ Invoke-SqlCmd
ΠΠ΅ΠΊΠ° Π²ΠΈ Π½Π°ΠΏΠΎΠΌΠ½Ρ Π·Π° ΠΎΡΠ½ΠΎΠ²Π½Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΡ . ΠΠΎΠ±ΡΠ°ΡΠ° ΡΡΠ°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ° sqlcmd Π Π°Π±ΠΎΡΠΈ ΠΈ ΠΏΠΎΠ΄ Linux, Ρ ΠΏΠΎΡΡΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ. ΠΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π·Π° ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° -Q, Π²Ρ ΠΎΠ΄Π½ΠΈΡ ΡΠ°ΠΉΠ» ΠΊΠ°ΡΠΎ -i ΠΈ ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠ°ΡΠΎ -o. ΠΠΎ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅, ΡΠ°Π·Π±ΠΈΡΠ° ΡΠ΅, ΡΠ° ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ ΠΊΡΠΌ ΠΌΠ°Π»ΠΊΠΈ ΠΈ Π³Π»Π°Π²Π½ΠΈ Π±ΡΠΊΠ²ΠΈ. ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ -i, ΡΠΎΠ³Π°Π²Π° Π²ΡΠ² ΡΠ°ΠΉΠ»Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ Π² ΠΊΡΠ°Ρ:
GO
EXIT
ΠΠΊΠΎ Π½ΡΠΌΠ° ΠΠΠ₯ΠΠ Π² ΠΊΡΠ°Ρ, ΡΠΎΠ³Π°Π²Π° sqlcmd ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΠΈΠ·ΡΠ°ΠΊΠ²Π° Π²ΡΠ²Π΅ΠΆΠ΄Π°Π½Π΅ ΠΈ Π°ΠΊΠΎ ΠΏΡΠ΅Π΄ΠΈ EXIT Π½ΡΠΌΠ° GO, ΡΠΎΠ³Π°Π²Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½ΡΠΌΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ. ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡΡ ΡΠ°ΠΉΠ» ΡΡΠ΄ΡΡΠΆΠ° ΡΠ΅Π»ΠΈΡ ΠΈΠ·Ρ ΠΎΠ΄, ΡΠ΅Π»Π΅ΠΊΡΠΈΠΈ, ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΠ΅ΡΠ°Ρ ΠΈ Ρ.Π½.
Invoke-SqlCmd ΠΏΡΠΎΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΊΠ°ΡΠΎ DataSet, DataTables ΠΈΠ»ΠΈ DataRows. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ, Π°ΠΊΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΎΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ ΠΈΠ·Π±ΠΎΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ sqlcmd, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ° ΠΈΠ·Ρ ΠΎΠ΄Π° ΡΠΈ, Π΅ ΠΏΠΎΡΡΠΈ Π½Π΅Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΈΠ·Π²Π»Π΅ΡΠ΅ Π½Π΅ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎ: Π·Π° ΡΠΎΠ²Π° ΠΈΠΌΠ° ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅-SqlCmd. ΠΠΎ ΡΠΎΠ·ΠΈ ΠΎΡΠ±ΠΎΡ ΠΈΠΌΠ° ΠΈ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½ΠΈ ΡΠ΅Π³ΠΈ:
- ΠΠΊΠΎ ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΠΈΡΠ΅ ΡΠ°ΠΉΠ» ΠΊΡΠΌ Π½Π΅Ρ ΡΡΠ΅Π· -ΠΡ ΠΎΠ΄Π΅Π½ ΡΠ°ΠΉΠ», Π’ΠΎΠ³Π°Π²Π° EXIT Π½Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ, ΠΎΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΡΠ·Π΄Π°Π²Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ½Π° Π³ΡΠ΅ΡΠΊΠ°
- -ΠΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΡΠ°ΠΉΠ» Π½Π΅, ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° Π²ΠΈ Π²ΡΡΡΠ° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΠΊΠ°ΡΠΎ ΠΎΠ±Π΅ΠΊΡ
- ΠΠΌΠ° Π΄Π²Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° Π·Π° ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° ΡΡΡΠ²ΡΡ: -ServerInstance -ΠΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎ ΠΈΠΌΠ΅ -ΠΠ°ΡΠΎΠ»Π° -ΠΠ°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΡΡΠ΅Π· -ConnectionString. ΠΠΎΠ»ΠΊΠΎΡΠΎ ΠΈ Π΄Π° Π΅ ΡΡΡΠ°Π½Π½ΠΎ, Π² ΠΏΡΡΠ²ΠΈΡ ΡΠ»ΡΡΠ°ΠΉ Π½Π΅ Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΡΠ΅ ΠΏΠΎΡΡ, ΡΠ°Π·Π»ΠΈΡΠ΅Π½ ΠΎΡ 1433.
- ΡΠ΅ΠΊΡΡΠΎΠ² ΠΈΠ·Ρ
ΠΎΠ΄, ΡΠΈΠΏ PRINT, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠΎΡΡΠΎ ΡΠ΅ βΡ
Π²Π°ΡΠ°β sqlcmdΠ·Π° ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅-SqlCmd
Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ - Π Π½Π°ΠΉ-Π²Π°ΠΆΠ½ΠΎΡΠΎ:
ΠΠ°ΠΉ-Π²Π΅ΡΠΎΡΡΠ½ΠΎ Π²Π°ΡΠΈΡΡ Linux Π½ΡΠΌΠ° ΡΠ°Π·ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°!
Π ΡΠΎΠ²Π° Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π‘Π°ΠΌΠΎ ΠΏΡΠ΅Π· ΠΌΠ°ΡΡ ΡΠΎΠ·ΠΈ 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 ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½. U ΠΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅-SqlCmd ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½ -ΠΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΡΡ, ΠΊΠΎΠΉΡΠΎ ΡΠΊΠ°Π·Π²Π° ΡΠ°ΠΌΠΈΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΡΠ΅ ΠΈΠ³Π½ΠΎΡΠΈΡΠ°, ΡΠ°ΠΌΠΈΡΠ΅ Π·Π°ΠΌΠ΅ΡΡΠ²Π°Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡΡ - ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ Π²ΡΡΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΎΡ Shell. ΠΠ±Π°ΡΠ΅ ΡΠ΅ ΠΎΠ±ΠΈΠ΄ΠΈΡ ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ ΠΈ ΡΠ΅ΡΠΈΡ ΠΈΠ·ΠΎΠ±ΡΠΎ Π΄Π° Π½Π΅ Π·Π°Π²ΠΈΡΡ ΠΎΡ ΡΡΡ ΠΈ Π΄Π΅ΠΉΡΡΠ²Π°Ρ Π³ΡΡΠ±ΠΎ ΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎ, ΡΡΠΉ ΠΊΠ°ΡΠΎ 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.
ΠΠ°ΡΠ²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅
ΠΡΠ² Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° 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 ΡΠ°ΠΉΠ»Π° ΠΈΠ·ΡΡΠ»ΠΎ ΠΈ Π³ΠΎ ΠΏΡΡ Π°ΠΌΠ΅ Π² ΠΏΠΎΠ»Π΅ΡΠΎ 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