SQL Server 2008 の復旧モデルとトランザクション ログの肥大化
SQL Server のトランザクションログは、復旧モデルによって変化し、完全モデルでは肥大化する
復旧モデルは、
完全
一括ログ
単純
があり、復旧モデルの確認/変更は、データベースのプロパティで実行する
SQLコマンドラインでは、ALTER DATABASE で以下のようにする
USE master
ALTER DATABASE [DatabaseName] SET RECOVERY { FULL | BULK_LOGGED | SIMPLE }
完全(Full)モデル(デフォルトの復旧モデル)
トランザクションログへ、すべての処理履歴を完全に記録する
このため、障害発生時に、障害が発生した直前まで、あるいは、指定時刻まで、
データを復旧することができる
一括ログ(Bulk Logged)モデル
トランザクションログへ記録する処理履歴を最小限に抑える
一括(bulk:バルク)操作のパフォーマンスを向上を優先する
インデックスの作成や再構築、
bcp コマンド、
BULK INSERT ステートメント、
Integration Services パッケージ、
SELECT INTO、
INSERT INTO など
このため、障害発生時に、期待通りの復旧ができない可能性がある
単純(Simple)モデル
チェックポイントが完了するごとに、トランザクションログを切り捨てる
ログの肥大化を防ぐことができる
障害発生時に、障害が発生した直前にはデータを復旧できない
(バックアップを取得した時点までの復旧となる)
トランザクションログのバックアップもとれない
※ ログの肥大化で、ディスク領域を圧迫している場合、
完全 から 単純 に切り替えて、バックアップを実行し、ログを切り捨てる
(Windows Server 2008 R2, SQL Server 2008 R2)
タグ:SQL
Windowsサーバ Listen port 確認
Windowsのネットワーク・サービスは、特定のTCPやUDPのポートで
リッスン(待ち受け = クライアントからの要求受付)している
どのサービスやプロセスがどのポートを使用しているか netstat で確認できる
----------
C:\>netstat -oan
Active Connections
Proto Local Address Foreign Address State PID
:
:
TCP 0.0.0.0:1433 0.0.0.0:0 LISTENING 7052
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING 2292
:
:
----------
-a : アクティブなコネクションとリッスンしているポートを表示
-n : ポート番号を表示
-o : ポートを使用しているプロセスIDを表示
PID 7052 を タスクマネージャで探してみると、MSSQLSERVER であることが見て取れる
また、ポート番号 1433 は、
ポート番号とサービス名の対応を記述した services ファイル
(%windir%\system32\drivers\etc\services)
を覗いてみると、以下の記述より、SQL-Server であることが分かる
# <service name> <port number>/<protocol> [aliases...] [#<comment>]
ms-sql-s 1433/tcp #Microsoft-SQL-Server
(Windows 2008 R2, netstat)
タグ:network
SQL Server 2008 R2 SSISパッケージで Import/Export を定期実行する
SSISパッケージをウィザードで作成し、SQLエージェントで実行させる。
.csv ファイルのImportのケースについて記述。Exportは、この逆の設定になる。
DTS wizard を起動する
"C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTSWizard.exe"
データソースの選択
全般ページで、
データソース = "フラットファイルソース"
ファイル名 = import する .csv ファイルを選択
ロケール = "日本語”
コードページ = 932(shift-JIS)を選択
形式 = "区切り記号"
テキスト修飾子 = '"'(ダブルクオテーション)
ヘッダ行区切り記号 = {CR}{LF}
スキップするヘッダ行 = 0
"先頭データを列名として使用する" をチェック
詳細設定ページで、
import後の 各列 の 型定義
[次へ]
変換先の選択
変換先 = "SQL Server Native Client 10.0"
サーバ名 = import先のサーバ名
認証 = "SQL Server 認証を使用する"
ユーザ名/パスワードを指定する
データベース = import先のデータベース名
[次へ]
コピー元のテーブルおよびビューを選択
変換元 = import する .csv ファイル
変換先 = import先のテーブル名
必要に応じて、[マッピングの編集] や [プレビュー] を行う
[次へ]
パッケージの保尊および実行
"すぐに実行する" をチェック
"SSISパッケージを保存する" をチェック
"ファイルシステム" を選択
(SQL Server内に保存すると、転用ができずメンテナンス性も悪くなる)
"パッケージの保護レベル" は "すべてのデータをパスワードで暗号化する"
パスワードを設定する
[次へ]
SSISパッケージの保存
名前/説明 = 任意の名前、説明を設定
ファイル名 = SSISパッケージの出力先のパスを指定
(D:\ssis\CsvImport.dtsx など)
[次へ]
ウィザードの完了
設定内容の一覧を確認し [完了] とすると、
.dtsx ファイルが出力され、データ import が実施される
SQL Server Management Studio で job を構成する
SQL Serverエージェント > ジョブ を右クリックして "新しいジョブ" を開く
全般ページ
名前 = 任意の名前を指定
説明 = 必要により記述
ステップ ページ
※import先のテーブルに既にデータがある場合 trancate する(つまりdelete&insert)
新規作成
ステップ名 = 任意の名前を指定(RunDeleteなど)
種類 = Transact-SQLスクリプト(T-SQL)
データベース = import先のデータベース名
コマンド = USE [DBname]
GO
Truncate Table [dbo].[TableName];
[OK]
新規作成
ステップ名 = 任意の名前を指定(RunSSISpkgなど)
種類 = SQL Server Integration Service パッケージ
パッケージソース = ファイルシステム
パッケージ = 作成したSSISパッケージのパスを指定
[OK]
設定したパッケージのパスワードを聞かれるので入力する
スケジュールページ
定期実行するスケジュールを設定する
[OK]
(Windows Server 2008 R2, SQL Server 2008 R2, SSIS, DTS)
Access起動時にSQL serverとのODBC接続を自動更新させる
ODBC接続を行うVBAモジュールを作成し、これをAccess2010のマクロ "AutoExec" からcallする
AccessDB.accdb を開き、
作成 > 標準モジュール > VBA の Module1 編集画面で、
VBA のコード(ex. RefreshODBCLink) を記述する
作成 > マクロ > マクロ作成画面で 、
"プロシージャの実行" を選択し、"プロシージャ名" で RefreshODBClink() を入力 > [保存] >
マクロ名を "AutoExec" として保存する
VBAモジュールの例:
----------
Function RefreshODBClink()
Dim Dbs As DAO.Database
Dim Tdf As DAO.TableDef
Dim strODBC As String
Set Dbs = CurrentDb
strODBC = "ODBC;DRIVER=SQL Server;UID=uid;PWD=password;LANGUAGE=日本語;DATABASE=dbname;SERVER=servername;"
' ODBCLink の再接続
For Each Tdf In Dbs.TableDefs
If Tdf.Connect Like "ODBC;*" Then
Debug.Print "Set Tdf Connect:" & Tdf.Name & ":" & strODBC
Tdf.Connect = strODBC
Tdf.RefreshLink
Tdf.Fields.Refresh
End If
DoEvents
Next Tdf
Dbs.TableDefs.Refresh
End Function
----------
ODBCリンクを作成するVBA
(Windows7, SQL Server 2008 R2, ODBC, Access 2010)