рдпрд╣ рд▓реЗрдЦ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдФрд░ рдореЗрд░реА рджреБрдЦрдж рдХрд╣рд╛рдиреА рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИред
RDS (MS SQL) рдХреЗ рд▓рд┐рдП
Zero Touch PROD рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░реА рдХрд░рдирд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рднреА рдХрд╛рди рдЧреБрд▓рдЬрд╛рд░ рдереЗ, рдореИрдВрдиреЗ рд╕реНрд╡рдЪрд╛рд▓рди рдХреА рдПрдХ рдкреНрд░рд╕реНрддреБрддрд┐ (POC - рдкреНрд░реВрдл рдСрдл рдХреЙрдиреНрд╕реЗрдкреНрдЯ) рдмрдирд╛рдИ: рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╕реЗрдЯред рдкреНрд░рд╕реНрддреБрддрд┐ рдХреЗ рдмрд╛рдж, рдЬрдм рдЬреЛрд░ рд╕реЗ, рд▓рдВрдмреЗ рд╕рдордп рддрдХ рддрд╛рд▓рд┐рдпрд╛рдВ рдмрдЬрддреА рд░рд╣реАрдВ, рддреЛ рдПрдХ рд╡рд┐рдореЛрдЪрд┐рдд рдУрд╡реЗрд╢рди рдореЗрдВ рдмрджрд▓ рдЧрдпрд╛, рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд╡реИрдЪрд╛рд░рд┐рдХ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рд╣рдо рд╕рднреА рдХреЗ рдкрд╛рд╕ рдЬреЗрдиреЗрдХрд╕ рджрд╛рд╕ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ!
рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ? рд╡рд┐рдВрдбреЛрдЬ рдХреЗ рдиреАрдЪреЗ рд╕реЗ рдРрд╕реА рдЧрд░реНрдо, рдЯреНрдпреВрдм рдбреАрдмреАрдП рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕реЗ рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рдкрд╛рд╡рд░рд╢реЗрд▓ рдХреА рдмрд╣реБрдд рдЧрд░реНрдореА рдореЗрдВ рдбрд╛рд▓реЗрдВ? рдХреНрдпрд╛ рд╡рд╣ рдХреНрд░реВрд░ рдирд╣реАрдВ рд╣реИ?

рдореБрдЭреЗ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХреЗ рдЗрд╕ рдЕрдЬреАрдм рд╕рдВрдпреЛрдЬрди рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдирд╛ рдерд╛ред рдмреЗрд╢рдХ, рдореЗрд░реА рд╕рднреА 30+ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕ рдиреЗ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред рдореЗрд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд▓рд┐рдП, рдПрдХ рдХрд╛рд░реНрдп рджрд┐рд╡рд╕ рдореЗрдВ рдореИрдВ рд╕рдм рдХреБрдЫ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред рдореИрдВ рдЧрд░реНрдо рдЦреЛрдЬ рдореЗрдВ рд▓рд┐рдЦ рд░рд╣рд╛ рд╣реВрдВред рддреЛ, рд╡рд┐рдВрдбреЛрдЬ рд╕реЗ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рдЖрдк рдХрд┐рди рдиреБрдХрд╕рд╛рдиреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
sqlcmd рдмрдирд╛рдо рдЖрд╣реНрд╡рд╛рди-SqlCmd
рдореБрдЭреЗ рдЙрдирдХреЗ рдмреАрдЪ рдореБрдЦреНрдп рдЕрдВрддрд░ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рдПрдВред рдЕрдЪреНрдЫреА рдкреБрд░рд╛рдиреА
sqlcmd рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде, рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд
рднреА рдХрд╛рдо рдХрд░рддреА рд╣реИред рд╣рдо -рдХреНрд╡реЗрд░реА рдХреЛ -Q, рдЗрдирдкреБрдЯ рдлрд╛рдЗрд▓ as -i, рдФрд░ рдЖрдЙрдЯрдкреБрдЯ -o рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рд╣реИрдВ, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдХреЗрд╕-рд╕рдВрд╡реЗрджреАред рдпрджрд┐ рдЖрдк -i рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрдВрдд рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦреЗрдВ:
GO EXIT
рдпрджрд┐ рдЕрдВрдд рдореЗрдВ рдХреЛрдИ EXIT рдирд╣реАрдВ рд╣реИ, рддреЛ sqlcmd рдЗрдирдкреБрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЕрдЧрд░
EXIT рд╕реЗ рдкрд╣рд▓реЗ рдХреЛрдИ
GO рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рд╕рднреА рдЖрдЙрдЯрдкреБрдЯ, рд╕реЗрд▓реЗрдХреНрдЯ, рдореИрд╕реЗрдЬ, рдкреНрд░рд┐рдВрдЯ рдЗрддреНрдпрд╛рджрд┐, рдЖрдЙрдЯрдкреБрдЯ рдлрд╛рдЗрд▓ рдХреЛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВред
Invoke-SqlCmd рдПрдХ DataSet, DataTables рдпрд╛ DataRows рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк
sqlcmd рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рд░рд▓ рдЪрдпрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ
рдкрд╛рд░реНрд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдЬрдЯрд┐рд▓ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИ:
рдЗрд╕рдХреЗ рд▓рд┐рдП
Invoke-SqlCmd рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдЯреАрдо рдХреЗ рдЕрдкрдиреЗ рдЪреБрдЯрдХреБрд▓реЗ рд╣реИрдВ:
- рдпрджрд┐ рдЖрдк рдЗрд╕реЗ -InputFile рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝рд╛рдЗрд▓ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ EXIT рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ
- -OutputFile рдирд╣реАрдВ, рдХрдорд╛рдВрдб рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ
- рдПрдХ рд╕рд░реНрд╡рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИрдВ: -ServerInstance -Username -Password -Database рдФрд░ through -ConnectionString ред рдЕрдЬреАрдм рддрд░рд╣ рд╕реЗ, рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк 1433 рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдПрдХ рдкреЛрд░реНрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
- рдкрд╛рда рдЖрдЙрдЯрдкреБрдЯ, рдЯрд╛рдЗрдк PRINT, рдЬреЛ рдХрд┐ рдкреНрд░рд╛рдердорд┐рдХ рд░реВрдк рд╕реЗ sqlcmd рджреНрд╡рд╛рд░рд╛ "рдкрдХрдбрд╝рд╛ рдЧрдпрд╛" рд╣реИ, Invoke-SqlCmd рдХреЗ рд▓рд┐рдП рдПрдХ рдореБрджреНрджрд╛ рд╣реИ
- рдФрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд: рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ cmdlet рдЖрдкрдХреЗ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИ!
рдФрд░ рдпрд╣ рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛ рд╣реИред рдХреЗрд╡рд▓ рдорд╛рд░реНрдЪ рдореЗрдВ рдпрд╣ cmdlet
рдиреЙрди-рд╡рд┐рдВрдбреЛрдЬ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛ рдЧрдпрд╛ , рдФрд░ рдЖрдЦрд┐рд░рдХрд╛рд░ рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ!
рдЪрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди
Sqlcmd -v рдХреЗ рд╕рд╛рде рдЪрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИ, рдЬреИрд╕реЗ:
SQL рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ, рд╣рдо рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
set @spid=$(spid) set @age=$(age)
рддреЛ рдпрд╣рд╛рдБ рд╣реИред * рдирд┐рдХреНрд╕ рдореЗрдВ
, рдЪрд░ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХрд╛рд░реНрдп рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ ред
-V рд╡рд┐рдХрд▓реНрдк рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИред
рдЖрд╣реНрд╡рд╛рди- SqlCmd рдЙрдкреЗрдХреНрд╖рд╛
-рд╡рд░рд┐ ред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реНрд╡рдпрдВ рдЪрд░ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ, рдЙрд╕реЗ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╕реНрд╡рдпрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдЖрдк рд╢реЗрд▓ рд╕реЗ рдХрд┐рд╕реА рднреА рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореИрдВ рдЪрд░ рд╕реЗ рдирд╛рд░рд╛рдЬ рдерд╛ рдФрд░ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░ рди рд░рд╣рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдФрд░ рдЖрджрд┐рдо рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдо рд╣реИрдВ:
рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рд╕рдордЭрддреЗ рд╣реИрдВ, рдпреВрдирд┐рдХреНрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реИред
рдлрд╛рдЗрд▓реЗрдВ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ
рд╡рд┐рдВрдбреЛрдЬ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рднреА рдСрдкрд░реЗрд╢рди рдПрдХ рдСрдбрд┐рдЯ рдХреЗ рд╕рд╛рде рдерд╛: рд╣рдордиреЗ sqlcmd рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛, рдЖрдЙрдЯрдкреБрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рдСрдбрд┐рдЯ рдкреНрд▓реЗрдЯ рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд┐рдпрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, SQL рд╕рд░реНрд╡рд░ рдиреЗ рдЬреЗрдирдХрд┐рдиреНрд╕ рдХреЗ рд╕рдорд╛рди рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛, рдпрд╣ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
CREATE procedure AuditUpload @id int, @filename varchar(256) as set nocount on declare @sql varchar(max) CREATE TABLE
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рдкреВрд░реА BCP рдлрд╝рд╛рдЗрд▓ рдХреЛ рдирд┐рдЧрд▓ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдСрдбрд┐рдЯ рдЯреЗрдмрд▓ рдХреЛ nvarchar (рдЕрдзрд┐рдХрддрдо) рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╣рд┐рд▓рд╛рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рдпрд╣ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдЪрд░рдорд░рд╛ рдЧрдИ, рдХреНрдпреЛрдВрдХрд┐ 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) {
рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдЪрдпрди рдХрд░реЗрдВ, рдХреНрд░рдо рдореЗрдВ n (рдкрд╣рдЪрд╛рди) рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдм рдЬреЗрдирдХрд┐рдиреНрд╕ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд░рддрд╛ рд╣реИред