Archive for the ‘SQLServer’ Category

SQLServer – ファイルを圧縮する

木曜日, 10月 23rd, 2014

・ファイルを圧縮しても小さくならない。
SQLServerのファイル(mdf)は、サーバーが管理をしており、中のデータ(レコード)が少なくなっても、ファイルの大きさは、ほとんど変化しません。各データベースには「圧縮」がついていますが、これをおこなっても、ファイルが小さくなることはなく、未使用領域が増えたりするだけです。
mdfファイルは稼動中は、コピーすることもできません。ファイルを固定することによって、安定した高速処理を実現しているのでしょう。

・mdfファイルを小さくする。
ファイルを最小にしたい場合は、以下の方法を試してみてください。

・アクセス
アクセス等で、SQLServerの実データをインポートし、作成しておく。
対象のSQLServerのリンクテーブルの選択クエリで、削除クエリを実行する。

・SQLマネージャ
SQLマネージャで、データベースの「圧縮」をおこなう。

「ファイルの圧縮」はデフォルトのままで。


「データベースの圧縮」は、再構築にチェックを入れる。


これでデータベースファイルが小さくなる。
上記のファイルの圧縮で、データベースファイルが小さくなるが、ログファイルがその分大きくなる。
下の再構築をするとログファイルも小さくなる。

○最小データベースの保管と再構築
定義されたほぼ空のデータベースとして、保管しておく。ファイルが壊れたりした場合などの、データベースのリセットに最適。
その後、アクセス等で、作成しておいたデータを追加クエリで流し込む。
ファイルが小さくなるため、キャッシュ等がなくなりパフォーマンスが落ちるが、しばらく使用していると、パフォーマンスは戻る。

SQLServer – インスタンス名とポート番号

金曜日, 10月 17th, 2014

・SQLServer2008 Expressで名前つきインスタンスが接続できない。

SQLServer2008 Express(以下SQLServer)に接続するには、通常「server01¥SQLExpress」という名前つきインスタンスで接続します。ところが、今回SQLServerを入れたServer2012R2ではその名前で接続できましたが、他のリモートPCからは接続できないという現象が起きました。
2012ではデフォルトでファイアウォールが開始しているので、1433と2000等を開ける設定をしました。インスタンス名を解決するSQL Server Browserを再起動したり、それが使用する動的なポートを使用しないようにしたり、2000を設定したりしてみましたが、相変わらず接続できません。
「server01」(既定のインスタンス・サーバー名)では接続できます。また「server01¥SQLExpress,1433」でも接続ができました。サーバー自身では接続できているわけですから、やはりポート、ファイアウォール辺りの問題であることは間違いないようです。
さらに調べてゆくと、SQL Server Browserが特別のポートを使用していることが分かりました。UDPの1434を使用しているようです。SQL Server Browser サービス。これが原因です。
DNSサーバーの名前解決と同じ方法のようです。これを開けてやれば、解決です。

・SQLServer構成マネージャとファイアウォールの設定


SQL Server Browser


動的ポートを空白、使用しない。


TCPポートを開ける。


UDPポートを開ける。

以上の設定でローカルネットワーク内のPCからインスタンス名で接続できるようになりました。ODBCも同じように接続できるようになります。
ローカルネットワーク内でのファイアウォールは邪魔な感じもしますが、これからは、このように意識して開けてゆくことに慣れる必要があります。ポートの知識も必須となります。