Edemede a bụ naanị ihe bara uru ma rara ya nye akụkọ dị mwute m
Na-akwado maka Zero Touch PROD maka RDS (MS SQL), nke ntị anyị niile nọ na-ama jijiji, emere m ihe ngosi (POC - Proof Of Concept) nke akpaaka: otu edemede nke powershell. Mgbe ihe ngosi ahụ gasịrị, mgbe oké ifufe ahụ, na-eto eto ogologo oge nwụrụ, na-atụgharị n'ime ịkụ aka na-adịghị akwụsị akwụsị, ha gwara m - ihe a niile dị mma, ma ọ bụ naanị maka echiche echiche, ndị ohu Jenkins niile na-arụ ọrụ na Linux!
Nke a ọ ga-ekwe omume? Were ụdị ọkụ dị otú ahụ, oriọna DBA si n'okpuru Windows wee rapara ya na oke ọkụ nke powershell n'okpuru Linux? Nke a ọ́ bụghị obi ọjọọ?
Aghaghị m itinye onwe m n'ime usoro teknụzụ a dị ịtụnanya. N'ezie, m niile 30+ scripts kwụsịrị ịrụ ọrụ. O juru m anya na m jisiri ike dozie ihe niile n'otu ụbọchị ọrụ. Ana m ede ihe n'ịchụso ọkụ. Yabụ, kedu ọnyà ị ga-ezute mgbe ị na-ebufe scripts powershell site na Windows gaa na Linux?
sqlcmd vs oku-SqlCmd
Ka m chetara gị isi ihe dị iche n’etiti ha. Ezi ihe ochie ịba uru sqlcmd Ọ na-arụkwa ọrụ n'okpuru Linux, yana ihe fọrọ nke nta ka ọ bụrụ ọrụ ya. Anyị na-agafe ajụjụ iji mebie -Q, faịlụ ntinye dị ka -i, yana mmepụta dị ka -o. Mana aha faịlụ, n'ezie, na-eme ka ọ bụrụ nke nwere mmetụta. Ọ bụrụ na ị na-eji -i, yabụ na faịlụ dee na njedebe:
GO
EXIT
Ọ bụrụ na enweghị EXIT na njedebe, mgbe ahụ sqlcmd ga-aga n'ihu na-echere ntinye, ma ọ bụrụ na mbụ ỤZỌ ỌPỤPỤ agaghị GO, mgbe ahụ iwu ikpeazụ agaghị arụ ọrụ. Faịlụ mmepụta nwere mmepụta niile, nhọrọ, ozi, mbipụta, wdg.
Invoke-SqlCmd na-arụpụta nsonaazụ dị ka DataSet, DataTables ma ọ bụ DataRows. Ya mere, ọ bụrụ na ị hazie nsonaazụ nke nhọrọ dị mfe, ị nwere ike iji sqlcmd, N'ịkọwapụta mmepụta ya, ọ fọrọ nke nta ka ọ bụrụ na ọ gaghị ekwe omume ịmepụta ihe mgbagwoju anya: maka nke a nwere Kpọọ-SqlCmd. Mana otu a nwekwara njakịrị nke ya:
Ọ bụrụ na ị bufee ya faịlụ site na -File ntinyemgbe ahụ ỤZỌ ỌPỤPỤ adịghị mkpa, Ọzọkwa, ọ na-arụpụta a syntax njehie
-File mmepụta mba, iwu ahụ na-eweghachi gị nsonaazụ dịka ihe
Enwere syntaxes abụọ maka ịkọwa sava: -ServerInstance -Aha njirimara -Password -Database ma site na -ConnectionString. N'ụzọ dị ịtụnanya, na nke mbụ, ọ gaghị ekwe omume ịkọwa ọdụ ụgbọ mmiri karịa 1433.
mmepụta ederede, pịnye PRINT, nke a na-ejide naanị sqlcmd, n'ihi na Kpọọ-SqlCmdbụ nsogbu
sqlcmd nwere mgbanwe mgbanwe site na iji -v, dịka ọmụmaatụ dịka nke a:
# $conn содержит начало команды sqlcmd
$cmd = $conn + " -i D:appsSlaveJobsKillSpid.sql -o killspid.res
-v spid =`"" + $spid + "`" -v age =`"" + $age + "`""
Invoke-Expression $cmd
N'ime edemede SQL anyị na-eji nnọchi:
set @spid=$(spid)
set @age=$(age)
Ya mere, ebe a. Na *nix mgbanwe mgbanwe anaghị arụ ọrụ... Oke -v leghaara anya. U Kpọọ-SqlCmd leghaara anya -Ngbanwe. Ọ bụ ezie na a na-eleghara oke nke na-akọwapụta mgbanwe ndị ahụ n'onwe ha, ngbanwe ndị ahụ n'onwe ha na-arụ ọrụ-ị nwere ike iji mgbanwe ọ bụla sitere na Shell. Agbanyeghị, enwere m iwe site na mgbanwe ndị ahụ wee kpebie ịghara ịdabere na ha ma ọlị, wee mee omume rụrụ arụ na nke mbụ, ebe ọ bụ na script SQL dị mkpụmkpụ:
Nke a, dịka ị ghọtara, bụ nnwale sitere na ụdị Unix.
Na -ebugote faịlụ
Na ụdị Windows, ọrụ ọ bụla sonye na nyocha: anyị gbara sqlcmd, nweta ụdị mmegbu na faịlụ mmepụta, tinye faịlụ a na efere nyocha. Ọ dabara nke ọma, SQL nkesa na-arụ ọrụ na otu ihe nkesa dị ka Jenkins, e mere ihe dị ka nke a:
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
Yabụ, anyị na-eloda faịlụ BCP kpamkpam wee tụba ya n'ọhịa nvarchar(max) nke tebụl nyocha. N'ezie, usoro a dum dara, n'ihi na kama ihe nkesa SQL enwetara m RDS, na BULK INSERT anaghị arụ ọrụ ma ọlị site na UNC n'ihi mgbalị iji were mkpọchi naanị na faịlụ, yana RDS nke a na-emebikarị site na. mmalite. Ya mere ekpebiri m ịgbanwe usoro nhazi ahụ, na-echekwa ahịrị nyocha site na ahịrị:
CREATE TABLE AuditOut (
ID int NULL,
TextLine nvarchar(max) NULL,
n int IDENTITY(1,1) PRIMARY KEY
)
Ma dee na tebụl a dị ka nke a:
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()
}
Ka ịhọrọ ọdịnaya, ịkwesịrị ịhọrọ site na NJ, họrọ n'usoro n ( njirimara).
N'isiokwu na-esonụ, m ga-abanyekwu nkọwa banyere otú ihe a niile si eme Jenkins.