スポンサードリンク

SQLServer データベースのファイル名を取得する

SQLServerのデータベースにはデータファイルとログファイルという2つのOSシステムファイルを保持している。データベースのファイル名を取得する。
ファイルの論理名は、SQLステートメントからファイル操作を行う場合に必要です。

use DBName

-- システムファイル
select 
	size		--ファイルサイズ
	,name		--ファイルの論理名
	,filename	--ファイルの絶対パス
	,status		--2(0x2):データファイル、66(0x40)ログファイル
from sys.sysfiles

SQLServer ロック状況を取得して強制切断する

信じられないことだけどSQLServerサーバを共有して開発をしていると
テーブルを排他ロックをかけたままにしてしまう人がいる(いた)。

相談をうけてロックする犯人の特定とロックの解除を行う作業に
使ったコマンドをまとめる。

手順は、「ロック対象を取得するクエリ」で対象を取得し「対象プロセスを中断するクエリ」を実行するだけです。
ロック長期保有しているエンジニアにお説教するのも忘れずに。対象クエリは強制切断する。

■テーブル取得クエリ

--ロック情報取得
SELECT * FROM sys.dm_tran_locks
--プロセス情報取得
SELECT * FROM sys.sysprocesses
--データベース情報取得
SELECT * FROM sys.databases
--テーブル情報取得
SELECT * FROM sys.tables

■ロック対象を取得するクエリ
状況を確認して実行ユーザを特定する。

-- 対象のデータベース
DECLARE @database AS VARCHAR(20) = 'AkairoDB'

-- ロックリソースを取得
SELECT l.resource_type
	 , l.resource_database_id --データベースID
	 , d.name 'DatabaseName' --データベース名
	 , t.name 'TableName' --テーブルID(あれば)
	 , l.request_mode --リクエストモード(共有ロック、更新ロック、排他ロック)
	 , l.request_type --lockか?
	 , l.request_status --ロックの状態。値は GRANT または WAIT 
	 , p.spid  -- SQLServer上のセッションID
	 , p.kpid --Windows上のスレッドID
	 , p.blocked -- ブロックしているセッションの ID
	 , p.hostname -- ホスト名
	 , p.status -- プロセス状態
	 , p.loginame -- ログインユーザ名
FROM sys.dm_tran_locks l
INNER JOIN sys.databases d
  ON d.database_id = l.resource_database_id
LEFT OUTER JOIN sys.tables t
  ON t.object_id = l.resource_associated_entity_id
INNER JOIN sys.sysprocesses p
  ON l.request_session_id = p.spid
WHERE d.name = @database
AND   p.spid <> @@SPID --自身を除外

■対象プロセスを中断するクエリ

DECLARE @spid AS smallint
--KILL { session ID | UOW } [ WITH STATUSONLY ]   
KILL @spid


<参照>

sys.sysprocesses (TRANSACT-SQL) | Microsoft Docs

KILL (Transact-SQL) | Microsoft Docs

Windows10の仮想デスクトップが便利

Windows10の新機能の仮想デスクトップが便利だ。

 

僕はデスクトップ1にOutLookを起動し、デスクトップ2にブラウザ、デスクトップ3は開発環境として使用している。

 

ショートカット

新しいデスクトップの作成:Win+Ctrl+D

デスクトップを切り替える:Win+Ctrl+D

使わないデスクトップを閉じる:Win+Ctrl+D

 

タスクビューのショートカット

タスクビュー起動:Win+TAB

 

作成した仮想デスクトップは、PC をシャットダウンしても次回起動時まで維持されます。

SQLServer 実行プランを削除・再作成する

SQLServerで非効率な実行プランが作成されて
思ったようなパフォーマンスがでないことがままあります。
(最近はないのかな💦)

そんなときのために実行プランをキャッシュから削除する方法がある。
サーバの処理がスローダウンしてどうしようもない時に
緊急措置として対応したことがある。


1)インスタンスの実行プランをすべて削除する場合

-- 実行プランを全削除
-- #WITH NO_INFOMSGSは、不要な情報ログを
-- #出力しないオプション
DBCC FREEPROCCACHE WITH NO_INFOMSGS

2)特定の実行プランのキャッシュだけ削除する場合

-- 対象のプランを取得する
SELECT 
         p.plan_handle -- ハンドルID
	, p.usecounts
	, st.text
FROM sys.dm_exec_cached_plans p
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st
WHERE text LIKE N'%Member%';

-- 実行プランを部分削除
-- 対象のキャッシュを手動で削除
DBCC FREEPROCCACHE( [ハンドルID] ) WITH NO_INFOMSGS

3)特定のテーブルの実行プランの再作成を指定する
  次回実行時に実行プランが再作成される

-- 特定の対象テーブルの実行プランを再作成する
EXEC sp_recompile 'テーブル名称'; 

4)特定のストアドプロシージャの実行プランを再作成する

-- 特定のストアドプロシージャの実行プランを再作成する
EXEC sp_recompile 'プロシージャ名'; 

SQLServer トランザクションログ切り捨て

SQLServerのトランザクションログの切り捨ては「BACKUP LOG WITH TRUNCATE_ONLY」を使っていましたが2008以降は、この機能が使えなくなっているようです。
以前はよく使っていたのですがいい加減な運用ダメということでしょうか。

データベースオプションの復旧モデルを「単純復旧モデル」に変更することでトランザクションログの破棄を行うことができる。

ALTER DATABASE AkairoDB SET RECOVERY SIMPLE;

-- 完全復旧モデル:FULL
-- 一括ログ復旧モデル:BULK_LOGGED
-- 単純復旧モデル:SIMPLE

VisualStudio デザイン設定

僕はよくVisual Studio で使用するフォントや色を変更する。

やっぱり、濃色が見やすいような気がします。

 

IDE の配色テーマの変更

  1. メニュー バーの [ツール (T)] 、[オプション (O)] の順にクリックします。
  2. オプションの一覧で、[環境]、[全般] の順にクリックします。

    f:id:freeradical0222:20181005111333p:plain

  3. [配色テーマ] 一覧で、既定値の [青] テーマ、[濃色] または [淡色] のいずれかを選択します。

    <青の場合>

    f:id:freeradical0222:20181005112027p:plain

    <淡色>f:id:freeradical0222:20181005112949p:plain


    <濃色>f:id:freeradical0222:20181005113117p:plain

 

 IDE のフォントの変更

  1. [メニュー]の[ツール (T)]、[オプション (O)]を選択する。
  2. オプションの一覧で、[環境]、「フォント及び色]を選択する。f:id:freeradical0222:20181005155418p:plain
  3. [フォント]一覧からいずれかのフォントをクリックしてOKする。
    ちなみに、Ctr+マウスホイールでコードの拡大ができます。

    f:id:freeradical0222:20181005155640p:plain

 

Windowsのハイコンストラクトカラーについて

Alt+Shift+PrintScreenキーを同時に押すことでWindowsハイコンストラクトカラーを使用することができます。Windowsそのものの設定なので全ての表示が変わります。もう一回押すと戻ります。

 

普段使いはしませんが、長期間コーディングする際に使用しており個人的には見やすいです。