Ichi chinyorwa chinoshanda chete uye chakatsaurirwa kunyaya yangu inosuruvarisa
Kugadzirira Zero Bata PROD yeRSS (MS SQL), iyo nzeve dzedu dzese dzanga dzichirira, ndakaita mharidzo (POC - Proof Of Concept) ye automation: seti yezvinyorwa zvepowershell. Mushure memharidzo, apo dutu, kuombera maoko kwenguva refu kwakapera, kushanduka kuita kuombera kusingaperi, vakandiudza - zvese izvi zvakanaka, asi nekuda kwezvikonzero zvepfungwa, vese varanda vedu veJenkins vanoshanda paLinux!
Izvi zvinogoneka here? Tora inodziya, mwenje DBA kubva pasi peWindows uye uinamire mukupisa chaiko kwesimba remagetsi pasi peLinux? Hahusi hutsinye here uhwu?
Ndaifanira kunyura mumubatanidzwa uyu wechienzi wetekinoroji. Ehe, ese angu 30+ zvinyorwa zvakamira kushanda. Zvakandishamisa ndezvokuti ndakakwanisa kugadzirisa zvinhu zvose muzuva rimwe chete rekushanda. Ndiri kunyora ndichitsvaga. Saka, ndeapi misungo yaungasangana nayo kana uchiendesa powershell zvinyorwa kubva kuWindows kuenda kuLinux?
sqlcmd vs Invoke-SqlCmd
Rega ndikuyeuchidze nezve musiyano mukuru pakati pavo. Utility yakanaka yekare sqlcmd Iyo inoshandawo pasi peLinux, ine inenge yakafanana mashandiro. Isu tinopfuudza mubvunzo wekuita -Q, iyo yekuisa faira se -i, uye yakabuda se -o. Asi iwo mazita emafaira, hongu, anogadzirwa-sensitive. Kana iwe ukashandisa -i, saka mufaira nyora kumagumo:
GO
EXIT
Kana pasina EXIT kumagumo, ipapo sqlcmd ichaenderera mberi nekumirira kupinza, uye kana zvisati zvaitika Buda hazvingadaro GO, ipapo murairo wekupedzisira hauzoshande. Iyo yakabuda faira ine zvese zvinobuda, zvinosarudzwa, mameseji, kudhindwa, nezvimwe.
Invoke-SqlCmd inogadzira mhedzisiro seDataSet, DataTables kana DataRows. Saka, kana iwe ukagadzirisa mhedzisiro yesarudzo yakapusa, unogona kushandisa sqlcmd, yapatsanura kuburitsa kwayo, hazvigoneke kutora chimwe chinhu chakaoma: nekuti ichi chiripo Invoke-SqlCmd. Asi chikwata ichi chinewo nyambo dzacho:
- Kana iwe uchiendesa faira kwaari kuburikidza -InputFile, ipapo Buda haidiwi, uyezve, inoburitsa chikanganiso che syntax
- -OutputFile kwete, murairo unokudzosera mhedzisiro sechinhu
- Pane zvirevo zviviri zvekutsanangura sevha: -ServerInstance -Username -Password -Database uye kuburikidza -ConnectionString. Oddly zvakakwana, mune yekutanga kesi hazvigone kutsanangura chiteshi kunze kwe1433.
- zvinyorwa zvinobuda, nyora PRINT, inongo "kubatwa" sqlcmdnokuti Invoke-SqlCmd
idambudziko - Uye zvinonyanya kukosha:
Zvingangodaro Linux yako haina cmdlet iyi!
Uye iri ndiro dambudziko guru. Chete muna March iyi cmdlet
Variable Substitution
sqlcmd ine shanduko yakasiyana-siyana uchishandisa -v, semuenzaniso seizvi:
# $conn ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π½Π°ΡΠ°Π»ΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Ρ sqlcmd
$cmd = $conn + " -i D:appsSlaveJobsKillSpid.sql -o killspid.res
-v spid =`"" + $spid + "`" -v age =`"" + $age + "`""
Invoke-Expression $cmd
Mune SQL script tinoshandisa zvinotsiva:
set @spid=$(spid)
set @age=$(age)
Saka hezvinoi. Mu *nix zvinochinja-chinja hazvishande. Parameter -v kufuratirwa. U Invoke-SqlCmd kufuratirwa -Variables. Kunyangwe iyo parameter inotsanangudza machinjiro pachawo ichifuratirwa, iyo inotsiva pachayo inoshanda-iwe unogona kushandisa chero shanduko kubva kuShell. Nekudaro, ndakagumburwa nezvinosiyana uye ndikafunga kusatsamira pazviri zvachose, uye ndakaita hutsinye uye neprimitively, sezvo zvinyorwa zveSQL zvipfupi:
# 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"
Izvi, sezvaunonzwisisa, muedzo watove kubva kuUnix vhezheni.
Kuisa mafaira
MuWindows vhezheni, chero kuvhiya kwaiperekedzwa nekuongorora: isu takamhanya sqlcmd, takagamuchira imwe mhando yekushungurudzwa mufaira rekubuda, yakanamatira iyi faira mundiro yekuongorora. Neraki, SQL server yakashanda pane imwechete server seJenkins, yakaitwa seizvi:
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
Nekudaro, isu tinomedza iyo BCP faira zvachose uye toisundira mu nvarchar(max) ndima yetafura yekuongorora. Ehe, iyi system yese yakaparara, nekuti pachinzvimbo cheSQL server ndakawana RDS, uye BULK INSERT haishande zvachose kuburikidza neUNC nekuda kwekuyedza kutora kiyi yakasarudzika pafaira, uye neRSS izvi zvinowanzo parara kubva. kutanga chaiko. Saka ndakafunga kushandura dhizaini yehurongwa, ndichichengeta mutsara wekuongorora nemutsara:
CREATE TABLE AuditOut (
ID int NULL,
TextLine nvarchar(max) NULL,
n int IDENTITY(1,1) PRIMARY KEY
)
Uye nyora mutafura iyi seizvi:
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()
}
Kuti usarudze zvirimo, unofanirwa kusarudza neID, uchisarudza mukurongeka n (kuzivikanwa).
Muchinyorwa chinotevera ini ndichaenda mune zvakadzama nezvekuti izvi zvese zvinodyidzana sei naJenkins.
Source: www.habr.com