SSIS 2012/2014 專案部署只部署修改某個有 Bug 的封裝

若專案已經部署且上線使用,當下開發中的 SSIS 專案繼續開發,這時線上的某個封裝錯了要修 Bug,而 2016 才可以針對特定專案版本的特定封裝個別部署(號稱的新功能,現在還沒看到),則避免開發中的封裝也一併被專案部署發行到正式機,可能的作法有:

1.透過 Source Control 調出上線的版本,單改有 Bug 的封裝後部署

2.從 Production 匯出

image

產生 ispac 檔

image

透過 SSDT 匯入後,將專案名稱取與 Production 相同,修改有 bug 的封裝後再部署

image

SSIS 直接輸入到有格式的 Excel 內

定義名稱區塊,可以參考:http://yangxinde.pixnet.net/blog/post/26182398-excel-%E9%81%B8%E5%8F%96%E7%AF%84%E5%9C%8D%E7%9A%84%E5%BB%BA%E7%AB%8B%E8%88%87%E5%88%AA%E9%99%A4%E5%90%8D%E7%A8%B1

 

image

SSIS 會將資料填入到區塊的下方,並擴增區塊。所以 template 建好後,每次從 template copy 一個新的填入

一般資料輸入到範本 Excel

image

名稱一定要兩格以上 SSIS 才看得到,可以透過縮小格子來排版

image

可新增到不同的名稱下

image

RS 訂閱報表採用 Windows 檔案共用時,輸出的檔案名稱包含日期

感謝聽課的朋友提醒,在檔案名稱欄位加上 @Timestamp

image

輸出如下的檔案

image

一個沒有贏家的爭

自己發的信,放於此,檢討自己。

 

 

 

昨晚,經歷了一群優秀的人陷在一個沒有贏家的爭。我現在不就…討論,這一部分需要研究與學習,可以理性為之,但需時間。

僅就另一個非理性面,隨情感面發酵與渲染的問題,期待大家自我省思:”謗”與”止謗”。

謗如漣漪擴散出去後,必招致四方的反饋,人群如同迴聲牆,謗者是承受不住的。因為嘴快於心,只能回應更多的謗,隨之的是更強的反饋,這是惡報輪迴。審視自己所缺的能力,想方設法讓自己做得更多更好。而不是論她人長短,除於事無補外,只會增加阻力減少助力,把自己逼到牆角。每個人的能力是做出來的,不是說出來的。

每個人有責任”止謗”,菩薩畏因,眾生畏果,你若喜歡參與是非論斷,代表你可分享的知性與感性事務貧乏,兩位乃至於多位參與者在聊完後,心中滋養了許多不平的種子,在一次次交談中發芽茁壯。你不是謗者,應第一時間結束談話,否則,是在建立對話習慣與等待刺激的胃口。五色令人目盲;五音令人耳聾;五味令人口爽。馳騁畋獵,令人心發狂,慎之。

最後,我只能以自己為例,近 20 年一心工作,俯仰天地無愧於心,謗於我如無物。而我因為深入技術之美,根本無心論人長短,這讓我一再感嘆領域浩瀚,而覺口舌之辯索然無味。想像 10 年後的你,要找人分享什麼,而跟你聊天的人喜歡跟你分享什麼?

20151119 PowerShell Seminar 的 Sample Code 和 Slide

https://onedrive.live.com/?authkey=%21AM58hx2vOseWkhM&id=BF14192BD27975CB%21158225&cid=BF14192BD27975CB

做 BI 要學什麼

昨天有位私交不錯,教開發的資深講師問我:有位學員問學 BI 要上什麼課

我:BI 流程大分 ETL、Data warehouse、Business Model、UI,這四大區塊都有雲跟地兩類技術的選擇,以及結構化與非結構化的選擇,所以 4*2*2 種變化組合

此外:

DW 還分 SMP 和 MPP

BM 分 In-Memory/Disk,Cube/Tabular,Data Mining/R/Machine Learning

UI 分報表/行動/Portal…

這些變化再相乘

朋友:喔…我請他直接問你好了

專案部署模式中,SSIS 的連接密碼以加密的方式賦予並儲存

朋友的有趣問題,我的解法如下:

設定封裝參數是 Sensitive

image

image

設定"連接"的 Password 屬性要以 SSIS Expression 套用變數

image

設定 Expression 對話窗的"屬性"欄位下拉選單選擇 Password,並賦予剛才建立需要加密的封裝參數

image

image

將專案部署到SSIS 目錄,透過 SSMS 開啟 Folder 下的環境結點

image

在 SSIS Catalog 建立需要加密的環境變數

image

專案參考剛才建立的環境

image

加入參考環境

image

針對需要加密的專案參數設定需要加密的環境變數

image

執行時搭配環境即可

image

 

之後要更改帳號密碼時,只需要呼叫 SP 即可

DECLARE @var sql_variant = N’HelloWorld’
EXEC [SSISDB].[catalog].[set_environment_variable_value] @variable_name=N’password’, @environment_name=N’env’, @folder_name=N’myFolder’, @value=@var

讓一般 login 建立 job 時,可以採用 proxy

巧玫提的有趣的問題,答案是需要呼叫 dbo.sp_grant_login_to_proxy,簡單的練習如下:

create login test with password=’abc’, check_expiration=off,check_policy=off

create credential abc with identity=N’sql2014\a’, secret=N’a’

use msdb

create user test for login test

alter role SQLAgentUserRole add member test

GO
EXEC msdb.dbo.sp_add_proxy @proxy_name=N’abc’,@credential_name=N’abc’,
        @enabled=1
GO
EXEC msdb.dbo.sp_grant_proxy_to_subsystem @proxy_name=N’abc’, @subsystem_id=3
GO

/*
訊息 14516,層級 16,狀態 1,程序 sp_verify_proxy_permissions,行 190
Proxy (2) 不允許用於子系統 "CmdExec" 與使用者 "test"。透過呼叫 sp_grant_proxy_to_subsystem 或 sp_grant_login_to_proxy 來授與權限。
*/
execute as user=’test’
    DECLARE @jobId BINARY(16)
    EXEC msdb.dbo.sp_add_job @job_name=N’test’, @job_id = @jobId OUTPUT

    EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N’test’,
            @step_id=1,
            @cmdexec_success_code=0,
            @on_success_action=1,
            @on_success_step_id=0,
            @on_fail_action=2,
            @on_fail_step_id=0,
            @retry_attempts=0,
            @retry_interval=0,
            @os_run_priority=0, @subsystem=N’CmdExec’,
            @command=N’"C:\Program Files\Excel Refresher\refreshexcel" "\\sql2014\drop\活頁簿1.xlsx"’,
            @output_file_name=N’C:\logs\refresh.log’,
            @flags=2,
            @proxy_name=N’abc’
revert

exec msdb.dbo.sp_delete_job @job_name=N’test’, @delete_unused_schedule=1

–要賦予 login 可以使用 proxy
EXEC dbo.sp_grant_login_to_proxy
    @login_name = N’test’,
    @proxy_name = N’abc’ ;
GO

execute as user=’test’
    DECLARE @jobId BINARY(16)
    EXEC msdb.dbo.sp_add_job @job_name=N’test’, @job_id = @jobId OUTPUT

    EXEC msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N’test’,
            @step_id=1,
            @cmdexec_success_code=0,
            @on_success_action=1,
            @on_success_step_id=0,
            @on_fail_action=2,
            @on_fail_step_id=0,
            @retry_attempts=0,
            @retry_interval=0,
            @os_run_priority=0, @subsystem=N’CmdExec’,
            @command=N’"C:\Program Files\Excel Refresher\refreshexcel" "\\sql2014\drop\活頁簿1.xlsx"’,
            @flags=2,
            @server=N’SQL2014′,
            @proxy_name=N’abc’

    –似乎不是 sysadmin 建立的 job 要多設定,否則會有以下的錯誤
    /*
    訊息 14256,層級 16,狀態 1,程序 sp_start_job,行 123
    無法啟動作業 "test" (識別碼 9BEF0503-F8A6-4F51-9596-0BAD743DFF34),因為未定義任何作業伺服器。請呼叫 sp_add_jobserver 建立作業和作業伺服器的關聯。    */
    EXEC dbo.sp_add_jobserver @job_name = N’test’ ;
revert

exec sp_start_job ‘test’

exec msdb.dbo.sp_delete_job @job_name=N’test’, @delete_unused_schedule=1
drop user test
exec sp_delete_proxy @proxy_name=’abc’
drop credential abc
drop login test

透過 PowerShell 測試網路穩定性,並記錄到檔案中

改寫自以下的 QA,因為它似乎有點問題

https://community.spiceworks.com/topic/337701-ping-via-powershell-log-results-with-timestamp

 

[CmdletBinding()]
Param (
    [int32]$Count = 5,
    [int32]$Waittime=1,
    [Parameter(ValueFromPipeline=$true)]
    [String[]]$Computers = @("www.hinet.net","127.0.0.1"),
    [String]$LogPath = "c:\temp\pinglog.csv"
)

#若是透過 Pipeline 進來,會每個元素執行 Process 一次
process
{
    $Ping = @()
    #Test if path exists, if not, create it
    If (-not (Test-Path (Split-Path $LogPath) -PathType Container))
    {   Write-Verbose "Folder doesn’t exist $(Split-Path $LogPath), creating…"
        New-Item (Split-Path $LogPath) -ItemType Directory | Out-Null
    }

    #Test if log file exists, if not seed it with a header row
    If (-not (Test-Path $LogPath))
    {   Write-Verbose "Log file doesn’t exist: $($LogPath), creating…"
        Add-Content -Value ‘"TimeStamp","Source","Destination","IPV4Address","Status","ResponseTime"’ -Path $LogPath
    }

    #Log collection loop
    Write-Verbose "Beginning Ping monitoring of $Comptuer for $Count tries:"
    for($i=0;$i -lt $Count; $i++)
    {
        foreach($Computer in $Computers)
        {
            $Ping = Get-WmiObject Win32_PingStatus -Filter "Address = ‘$Computer’" | Select @{Label="TimeStamp";Expression={Get-Date}},@{Label="Source";Expression={ $_.__Server }},@{Label="Destination";Expression={ $_.Address }},IPv4Address,@{Label="Status";Expression={ If ($_.StatusCode -ne 0) {"Failed"} Else {"Ok"}}},ResponseTime
            $Result = $Ping | Select TimeStamp,Source,Destination,IPv4Address,Status,ResponseTime | ConvertTo-Csv -NoTypeInformation
            $Result[1] | Add-Content -Path $LogPath
            Write-verbose ($Ping | Select TimeStamp,Source,Destination,IPv4Address,Status,ResponseTime | Format-Table -AutoSize | Out-String)
        }   
        Start-Sleep -Seconds $Waittime
    }
}

 

執行範例如下:

.\PingTest.ps1 -LogPath "C:\temp\pingres.txt" -Computers @("www.hinet.net","127.0.0.1") -verbose

在 SharePoint 上透過 Power View 存取 AS Tabular Model 時要換身分

感謝微軟 Ray 告知的解法,在 SharePoinrt 上要用 Report Data Source(Data Source Type 選擇 Microsoft BI Semantic Model for Power View) 而非 BI Semantic Model Connection

image

詳細作法參考以下網址:

http://whitepages.unlimitedviz.com/2012/04/fixing-access-errors-when-creating-a-bism-connection-for-powerview/

關注

有新文章發表時,會立即傳送至你的收信匣。

加入其他 30 位關注者