HowTo: Management Studio を使ってトランザクションログファイル (ldf) のサイズを小さくする方法

神谷 雅紀 Escalation Engineer 「ログファイルが大きくなってディスク領域を圧迫し始めているので、ファイルサイズを小さくしたい」という内容の問合わせは今でも多く寄せられます。今回は、SQL Server Management Studio GUI を使って、トランザクションログファイルのサイズを小さくする手順を紹介します。 ここに記載した方法で、トランザクションログファイルのサイズを小さくしたいという状況のほとんどに対応可能だと思います。 ここに記載した方法でトランザクションログファイルのサイズを小さくできない場合は、おそらく、トランザクションログファイルのサイズを小さくする前に、レプリケーションやミラーリングのトラブルシューティングなどが必要になるでしょう。 ステップ 1 : データベースの復旧モデルを確認する 復旧モデルが「単純」かそれ以外かによって、以降の手順が違ってきますので、まず最初に、データベースの復旧モデルを確認します。 手順 復旧モデルを確認するために、データベースのプロパティを表示します。データベースのプロパティは、オブジェクトエクスプローラでデータベース名を右クリックし、「プロパティ」をクリックすることで表示できます。 表示されたダイアログボックスの左ペインで「オプション」を選択すると、右ペインに「復旧モデル」が表示されます。復旧モデルは、「単純」「完全」「一括ログ」のいずれかです。 ステップ 2 : トランザクションログをバックアップする トランザクションログは、データベースファイルへの更新履歴ですので、データベースに対して更新を行うたびにトランザクションログファイルには履歴データが記録され、何もしなければ、トランザクションログファイル内の履歴データはどんどん増えていきます。 復旧モデルが「単純」の場合は、トランザクションログファイル内のデータ量が一定量を超えると、SQL Server がファイルの中身を消し、ファイル内に空き領域を作り、空いた領域は再利用されます。 一方、復旧モデルが「完全」または「一括ログ」に設定されている場合は、過去に一度でもデータベースの完全バックアップ (データベースフルバックアップ) を取得していると、SQL Server はファイルの中身を消すことはしませんので、トランザクションログファイル内のデータは、バックアップしなければ削除されません。 このステップ 2 は、復旧モデルが「完全」または「一括ログ」の場合のみ行います。「単純」の場合は、次のステップ 3 に進みます。 手順 データベースを右クリックし、「タスク」 –  「バックアップ」をクリックします。 「バックアップの種類」として「トランザクションログ」を選びます。もし、復旧モデルが「単純」に設定されている場合は、「トランザクションログ」は選択できません。 「バックアップセットの有効期限」は既定のまま、「バックアップ先」は、バックアップデータを書き込むファイル名を指定します。「ディスク」を指定して、「追加」でファイル名を指定して下さい。そのサーバーにテープデバイスがある場合には、「テープ」を選んでも構いません。 最後に「OK」を押すと、バックアップが開始されます。 復旧モデルが「完全」または「一括ログ」であっても、データベースの完全バックアップが一度も取得されていない場合、トランザクションログのバックアップは以下のエラーで失敗します。 メッセージ 4214、レベル 16、状態 1 現在、データベースのバックアップが存在しないので、BACKUP LOG を実行できません。 復旧モデルが「完全」または「一括ログ」であっても、データベースの完全バックアップが一度も取得されていない場合は、トランザクションログは自動的に切り捨てられていますので、このステップを実行せずにステップ 3…

4

SQL Server 2016 [新機能] 動的なデータマスキングでクエリの変更が必要な場面は?

  みなさん、こんにちは。 Microsoft SQL Server/Microsoft Azure SQL Database サポートチーム です。 SQL Server 2016 から動的なデータマスキングの機能が加わりました。 動的なデータマスキングの特徴として、クエリの結果に対してマスクが適用されるため、アプリケーション側でのクエリの変更が不要な場合が多い点にあります。   動的なデータ マスキング https://msdn.microsoft.com/ja-jp/library/mt130841.aspx 動的データマスクは、クエリの結果にマスク ルールが適用されるため、既存のアプリケーションで簡単に使用できます。 多くのアプリケーションは、既存のクエリを変更せずに、デリケートなデータをマスクすることができます。     一方で意図した結果にならないということでお問い合わせを頂くケースも出てきました。 ここではアプリケーション側でのクエリの変更が必要な場面の例をご紹介したいと思います。 いずれも仕様に沿った結果ではありますが、ご参考頂ければ幸いです。   変更が必要な場面 カーソルで取得した値がマスクされる前の値であることを前提としている実装 カーソルで取得した値は既にマスクされているため、マスクされた後の値であることを前提とした実装に変更する必要があります。 取得した値をクエリ内で置き換えた場合 置き換えた値もマスク対象となるため、マスクされた値であることを前提とした実装が必要です。   以下は、上記の具体例です。 前準備   ※公開情報で紹介しているテーブルとデータを使用しています。    動的なデータマスキング    https://msdn.microsoft.com/ja-jp/library/mt130841.aspx   テーブルを作成します。 CREATE TABLE Membership    (MemberID int IDENTITY PRIMARY KEY,     FirstName…

0

イベント ID : 455/489/490 及び 413/486 の対処方法について

  皆さん、こんにちは。 BI Data Platform サポートチーム です。 ※ BI Data Platformサポートチーム では、Microsoft SQL Server/Azure SQL Database/BI Azure などの製品をサポートしています。 今回は、イベント ID : 455/489/490 及び 413/486 の対処方法について、紹介したいと思います。   Windows Server 2012 以降、ソフトウェアの使用状況を収集する機能が追加されており、ソフトウェアの使用状況 を収集する機能の中で、“C:\Windows\system32\LogFiles\Sum” フォルダ配下への読み取り、書き込みが行われています。 そして、SQL Server サービス に指定された サービス起動アカウントに、“C:\Windows\system32\LogFiles\Sum” フォルダ配下に対する読み取り、書き込み、変更権限が付与されていない場合、権限不足に起因し、イベント ID : 455/489/490 がイベントログに記録されます。   ソース:ESENT イベントID:455 内容:   sqlservr (2032) ログファイル C:\Windows\system32\LogFiles\Sum\Api.log を開いているときに、エラー -1032 (0xfffffbf8) が発生しました。 ソース:ESENT…

0

トラブルシューティング手法とサポートサービス

システムで何らかのエラーが発生したという場合や、やりたいことができないといった場合に、トラブルシューティングを行うことになりますが、その際の一般的なトラブルシューティングの流れについてご紹介します。私たちサポートチームもだいたいこのようなフローの考え方をもとに調査を行っています。また、テクニカルサポートでは、インシデント単位で承っているプロフェッショナルサービスと、時間単位で承っているプレミアサービスがあります。トラブルシューティング内容に応じた、それらのサポートサービスの違いについても、参考としてご案内します。 大きく、運用でのエラー発生、開発時の How-to では考え方も異なりますので、それぞれ分けて見ていきます。 エラー発生 A) いま事象が発生しているか これは一番重要なポイントになります。いま事象が発生している場合には、すぐに対処が必要なため緊急度は高くなり、できることも多くなります。復旧優先で対処となりそうな対応をすぐに行ったり、原因調査のためにいったん情報も採取してから対処を行うといった対応があります。 一方、いま発生していないけれども、過去発生していたエラーをさかのぼって調査することもあります。この場合には、どれだけ手掛かりとなる情報が残っているかが重要です。 B)エラーメッセージやログから調査 いま事象が発生している場合には、エラーメッセージやログを確認します。 SQL Server を例にとると、既定で出力されている情報として参考になるのは、下記があります。 既定の情報 SQL Server エラーログ (ERRORLOGファイルや、同じフォルダにあるデフォルトトレースやダンプファイル等) Reporting Services ログ (ログファイルや同じフォルダにあるダンプファイル、ExcecutionLog ビュー) Analysis Services ログ (msmdsrv.logやフライトレコーダー) イベントログ その他、事象に応じて、次のような情報を採取することもあります。 追加情報 ブロッキング情報 動的管理ビュー サーバートレース 拡張イベント パフォーマンス カウンター 問題ステップ記録ツール BID トレース ネットワークトレース ダンプファイル プロフェッショナルサービス、プレミアサービスのいずれでも、これらの情報からの調査は承っています。違いとしては、下記があります。 プロフェッショナルサービス これらの情報から、対処方法を調査してご案内します。 プレミアサービス これらの情報から、対処方法を調査してご案内します。また、必要に応じて原因追及の調査も行うことが可能です。 追加情報の中でも、BIDトレース、ネットワークトレース、ダンプファイルを採取する必要がある事象については、環境依存の問題の可能性が一般的には高いと言えます。その場合にはプレミアサービスでのみ調査可能です。   C) 発生状況の切り分け 事象によっては、情報採取よりも、事象が発生するパターン、発生しないパターンを切り分けることによって、問題点が特定できる場合があります。また、発生しないパターンが確認できると、それが対処方法に直結する場合もあります。例えば、次のような切り分けがあります。 特定の環境で発生する、もしくは複数の環境で発生する 特定のクライアントで発生する、複数のクライアントで発生する 特定のユーザーで発生する、複数のユーザーで発生する…

0

SQL Server 2012/2014 をインストールするために必要な .NET Framework について

皆さん、こんにちは。 SQL Server/Microsoft Azure SQL Database サポートチームです。 今回は、SQL Server 2012/2014 をインストールするために必要な .NET Framework について紹介します。   SQL Server 2012/2014 をインストールするために必要な .NET Framework については、以下の Books Online で公開していますが、本 Blog の中で、.NET Framework の要件について補足したいと思います。 SQL Server 2014 のインストールに必要なハードウェアおよびソフトウェア SQL Server 2012 のインストールに必要なハードウェアおよびソフトウェア    .NET Framework  バージョン  補足説明  .NET Framework 3.5 SP1  データベース エンジン、Reporting  Service、SQL Server Management Studio などの 機能/ツールをインストールする場合に必要  .NET Framework…

1

[SQL Database] 新バージョン(V12) へのアップグレード用 PowerShell コマンドレット

  SQL Server/Microsoft Azure SQL Database サポート 福原 宗稚 Microsoft Azure SQL Database では、Basic/Standard/Premium エディションの環境で、新バージョン V12 へのアップグレードが可能になっています。これまでもポータル画面から、手動でアップグレードや、アップグレードの状態確認ができましたが、新しい Windows Azure PowerShell によって、PowerShell コマンドレットからも実施可能になりました。また、PowerShell コマンドレットでは、ポータル画面からできないアップグレードのキャンセルも可能という利点があります。   Start-AzureSqlServerUpgrade : 新バージョン V12 へのアップグレードを実行します。アップグレードは、バックグラウンドで行われるため、アップグレードを開始した後もデータベースはオンラインのまま使用可能です。 Get-AzureSqlServerUpgrade : 実行中のアップグレードの状態を確認します。 Stop-AzureSqlServerUpgrade : 実行中のアップグレードをキャンセルします。上記の通りアップグレード開始後もデータベースは使用可能ですが、万が一何か予期しない問題が発生した場合や、誤ってアップグレードを開始してしまったので改めて後日やり直したいといった場合に使えます。   手順 1.  Microsoft Web Platform Installer から、最新の Windows Azure PowerShell をインストールします。 ※すでに Azure PowerShell のバージョンが、2015年5月リリースの 0.9.1 以上であれば、新たに Windows Azure…

0

[SSRS] HowTo:詳細レポートを別ウィンドウで開く方法

  SQL Server Developer Support チーム 須田 恵 こんにちは! 今日は比較的よくあるお問い合わせについてご紹介いたします。 SSRS では、メインレポートのリンクをクリックすると詳細レポートが開くよう設定することが可能です。 出展:詳細レポート (レポート ビルダーおよび SSRS) テキストボックスや画像などのプロパティ画面にて [アクション] をクリックし、[レポートに移動する] ラジオボタンを選択し、移動先のレポートを指定します。 参考情報:レポートへのドリルスルー アクションの追加 (レポート ビルダーおよび SSRS) 上記設定では、メインレポートのリンクをクリックすると、詳細レポートは同一ウィンドウで開かれます。 リンクを右クリック [新しいウィンドウで開く] を選択しても、空白のページが開くのみです。 メインレポートと詳細レポートを別ウィンドウにして、メインレポートもそのまま参照できるようにしたい場合はどうすればよいでしょうか?   別ウィンドウで開くには? アクションの設定を [レポートに移動する] から、[URL に移動する] に変更し、かつ JavaScript を組み合わせることで実現可能です。 1) テキストボックスのプロパティ画面にて [アクション] をクリックし、[URL に移動する] ラジオボタンを選択します。 2) [fx] ボタンをクリックし、[式] ウィンドウを表示し設定します。 基本的な構文は下記です。 =”javascript:void(window.open(‘”+ <移動先のレポートのURL > + “‘,’_blank’))”…

0

[SQL Database] Web および Business エディションの終了に伴う、新エディションへの移行について (Microsoft Azure SQL Database)

  皆さん、こんにちは。 SQL Server/Microsoft Azure SQL Database サポートチーム です。 既にご存知の方も多いかと思いますが、Microsoft Azure SQL Database (以下 MASD) の 旧エディション (Web および Business) が、2015年9月以降、利用できなくなります。 本サービスの終了に伴い、現在 旧エディション (Web および Business) をご利用のお客様は、新エディションへの移行 (アップグレード) が必要となります。 そのため、本サービスが終了するまでに、計画的に新エディションへの移行 (アップグレード) をお願いします。 尚、新エディション (Basic/Standard/Premium) への移行 (アップグレード) は、Windows Azure 管理ポータル から オンライン処理 で実施することが可能です。※ 新エディションへの移行中も、お客様データベースへのアクセス (SELECT/UPDATE/DELETE/INSERT) が可能です。   [新エディションへの移行手順] 1) Windows Azure 管理ポータルにログインします。 2) 移行対象 (アップグレード対象) のデータベースを選択します。…

0

Kerberos認証を用いてファイル共有上のデータを基にBulk Insertするとアクセス拒否で処理が失敗する

  横井 羽衣子 (よこい ういこ) SQL Server Developer Support Engineer 皆さん、ご機嫌よう。今日は共有フォルダ上のファイルをソースとして Bulk Insert を実行した際、アクセス拒否エラーが発生する現象についてご紹介します。 エラー : メッセージ 4861、レベル 16、状態 1、行 1 ファイル “<CSV ファイル名>” を開けなかったので、一括読み込みできません。オペレーティング システム エラー コード 5(アクセスが拒否されました。)。 発生条件 : ・Active Directory 環境であること ・Windows 認証 を使うこと ・Bulk Insert のソースは SQL Server 構成マシンとは別のマシン上に配置されていること ※ SQL Server 認証ユーザーで実行される場合は、問題は発生しません。 ※ Always ON / シングル構成に限らず発生します。 図 : File…

0

Analysis Services のデッドロックとブロッキングの確認方法

はじめに Analysis Services データベースにおいてもデッドロックやブロッキングが発生することがあり、SQL Server Profiler を使って発生状況を確認する事が可能です。 Profiler の起動方法についてはこちらをご覧下さい。SQL Server も Analysis Services も Profiler の起動方法は同じです。Profiler の接続先を Analysis Services インスタンスに指定することで、Analysis Services のトレースを取得できます。 ※Profiler を GUI で使用すると、スクリプトで取得する場合と比較して負荷が大きくなります。そのため、運用環境で情報を取得する場合は、スクリプトで取得する事をお勧めします。スクリプトでの取得方法は、[SSAS] SQL Server Analysis Services トレース採取方法 をご覧ください。 — 参考情報DO’s&DONT’s #1: やらない方がいいこと   運用環境で、Profiler GUI を使用してトレースする デッドロックの確認方法Analysis Services のデッドロックは SQL Server Profiler の Deadlock イベントで確認することができます。Deadlock イベントでは、デッドロックを検知した際に、XML の構造でその情報を取得します。どのセッションがどのオブジェクトに対してロックを獲得していて、どのセッションがそのオブジェクトへのロック獲得を待っているのかを確認することができます。 Deadlock イベントは既定で有効になっていないため、トレースのプロパティで [すべてのイベントを表示する] オプションから…

0