【T-SQL Tips】指定列の値が重複しているレコード単位から先頭1件のみを抽出する

優先順位を付けた重複データ1件を取得という要件があったのでいろいろ考え抜いて作ってみました。パフォーマンスは一切考えてないのでそれはのちの改善点として。

SQL Server の Service Broker が正常に動作しない場合の対処法

Service Broker にメッセージやキューなどを登録したにもかかわらず、正常に処理されない場合の確認と対処方法について記載します。ただ、実際に動作しない原因については多岐にわたる場合がありますので、ここではその一例としてとらえておいてください。

Service Broker 自体が有効かどうか確認
select name, is_broker_enabled from sys.databases
Service Broker を有効にする
alter database [データベース名] set enable_broker with rollback immediate
なんのエラーが発生しているかを確認

最後の列にエラーの理由が載っています。

select * from sys.transmission_queue order by enqueue_time desc
データベースの所有者が正しく設定されているかを確認(null なら設定されていない)
select d.name as 'database', s.name as 'owner'
from sys.databases d
left join sys.server_principals s
  on d.owner_sid = s.sid;

設定されていなければデータベースを右クリックしてプロパティから所有者を設定 (sa とか Administrator とか本来設定されるべきもの)

SQL Server のセキュリティ-ログインに設定しているユーザーと、対象データベースのユーザーが一致しているか

他のサーバーにあったデータベースを復元すると一致していないことが多い

]]>

[SSRS] レポートマネージャーでレポートがサブスクリプションによって自動エクスポートされたときのログを確認する

メモ書きです。

環境

  • SQL Server : SQL Server 2008 R2

内容

ログを確認すると、エクスポートされたレポートの種類や、エクスポートにかかった時間、結果、出力サイズ、行数などが参照できます。

ログを確認するには SQL Server Reporting Services をインストールした時に作成されるデータベース「ReportServer」のテーブルを参照します。

以下の SQL を実行するとログの内容を確認できます。

use [ReportServer];
select
  B.[Path]                -- レポートのパスと名前
 ,A.[LogEntryId]
 ,A.[InstanceName]        -- レポートサーバーインスタンス名
 ,A.[ReportID]
 ,A.[UserName]            -- 実行ユーザー
 ,A.[ExecutionId]
 ,A.[RequestType]
 ,A.[Format]
 ,A.[Parameters]          -- レポートの出力に指定したパラメーター
 ,A.[ReportAction]
 ,A.[TimeStart]           -- 出力を開始した時間
 ,A.[TimeEnd]             -- 出力が完了した時間
 ,A.[TimeDataRetrieval]   -- データの取得にかかった時間 (単位はミリ秒)
 ,A.[TimeProcessing]      -- レポートの処理にかかった時間 (単位はミリ秒)
 ,A.[TimeRendering]       -- レポートの表示にかかった時間 (単位はミリ秒)
 ,A.[Source]
 ,A.[Status]              -- rsSuccess(成功) またはエラー コード
 ,A.[ByteCount]           -- レポートのファイルサイズ
 ,A.[RowCount]            -- クエリ結果の行数
from [ExecutionLogStorage] A
inner join [Catalog] B
  on B.[ItemID] = A.[ReportID]
where convert(varchar(8), A.[TimeStart], 112) = '20151104'  -- いつのデータを取得したいか、などの条件
order by A.[LogEntryId] desc;

各パラメータの詳しい情報などは以下の URL 先を参照してください。SharePoint について書かれていますが、内部では Reporting Service を使っているので大体同じです。

]]>

Windows 8.1 や Windows Server 2012 R2 で「SQL Server 構成マネージャー」を起動する方法

以前の OS では「SQL Server 構成マネージャー」はスタートメニューの SQL Server 関連のフォルダの中にショートカットとして配置されていたため、そこから起動することができたのですが、Windows 8.1 や Windows Server 2012 R2 に SQL Server をインストールするとなぜか SQL Server 構成マネージャーがスタートメニューのどこにも見当たらなくなります。(もしかしたら Windows8, Windows Server 2012 もかもしれません)

SQL Server 構成マネージャーを起動(使う)には以下の方法を行います。

スタートボタンを右クリックして「コンピューターの管理」を選択。

2014-08-06 08_48_56-rmtdt.sorceryforce.net_3404 - リモート デスクトップ接続

「コンピューターの管理」⇒「サービスとアプリケーション」の中に SQL Server 構成マネージャーがあります。

2014-08-06 08_49_21-rmtdt.sorceryforce.net_3404 - リモート デスクトップ接続

]]>

Tips 更新

最近また忙しかったりしてブログにも Twitter にも書き込んでいない状態でしたが少し落ち着いてきたので久々に書き込みます。

sorceryforce.net の方で Tips を4つほど公開しました。SQL Server 関連ですが、大体はインストールとかセットアップとかそんなところの内容になってます。しかも CTP 版や Preview 版なのであんまり Tips に載せるべきものでもないような気がしますが (^^;)

後、ページ一覧をグループ分けして表示できるように作りました。前まではとにかくページをずらずら並べているだけだったのでちょっと見にくかったかもしれません。こういうのって HTML で直書きすると一瞬で終わるのにプログラムで作ろうとするとかなり手間なんですよね…。

]]>