コマンドからWindowsFilewallを操作する

上手く動かねないじゃん!と思ってググった備忘録

一般的な事かもしれないけど、書き方のルールは以下の通り

  1. rule= や name=はダブルクォテーションで囲う
  2. profile=で複数プロファイルを指定する時もダブルクォテーションで囲う
  3. 既存のルールには同じ名前でプロファイルが異なる物が多い。
  4. その場合は設定変更の場合は、対象をユニークになるように指定する必要がある。
    netsh advfirewall firewall show rule name=”Windows リモート管理 (HTTP 受信)” dir=in
    → 2つある
    netsh advfirewall firewall show rule name=”Windows リモート管理 (HTTP 受信)” dir=in profile=”domain,private”
    → ユニーク
    netsh advfirewall firewall show rule name=”Windows リモート管理 (HTTP 受信)” dir=in profile=”pblic”
    → ユニーク

  5. 変更の場合は、set name=<対象の名前> <対象をユニークにする条件> new <変更後の設定> と書く
  6. netsh advfirewall firewall set rule name=”Windows リモート管理 (HTTP 受信)” dir=in profile=”domain,private” new profile=any

SQL Server 2016 StandardのAlwaysONを試す

今までEnterprise版でのみ利用可能だったSQLServerのAlwaysONについて2016から一定の制限はありますが、高可用性グループの作成が出来るようになりましたので早速構築してみました。

【制限】
・1つの高可用性データベースに所属できるスキーマは1つのみ

複数のリスナーは作成は出来るが、Masterを片寄出来ないのが難点。
もちろんjoin句も利用出来ないのでアプリケーション側で結合するか、Linkサーバーとやらを使うしかない(?)

サーバーA:

  • リスナー 192.168.x.10 データベース名1(Primary) 
  • リスナー 192.168.x.11 データベース名2(Replica)

    サーバーB:

  • リスナー 192.168.x.10 データベース名1(Replica) 
  • リスナー 192.168.x.11 データベース名1(Primary)

    構築方法は、SQLServer2012と基本的に同じ。
    ただし、SSMSの日本語ローカライズ版はにはバグがあり、現時点では以下の事が出来ません。

  • 対象DBの完全同期(ウィザードからフルバックアップ、リストア)が出来ない。
  • レプリカサーバーがAGに自動参加しない
  • レプリカサーバーにNORECOVERYでリストアし、可用性DBに参加させようとすると、データ差異があると言われて可用性データベースに参加できない。

    20161017_1

    マイクロソフトに確認したが、修正リクエスト中でいつ直るか解らないとの事だったので、英語版のSSMSを使って構築するとすんなり行く。

  • シングルクォート内で変数を展開する

    T-SQLで、シングルクォート内で変数を展開するに上手いやり方が解らない・・・
    例えば以下のようなクエリ。

    [sql]
    DECLARE @d nvarchar(50)
    DECLARE @cmd nvarchar(100)

    SET @d = N’C:\database\backup’
    SET @cmd = N’dir ‘ + @d + ‘ /b’
    exec master..xp_cmdshell @cmd
    [/sql]

    効率悪いと思うけど、1時間ほどググってこれで落ち着いたが正しいのかな?
    個人的には、以下のように書きたい。書いたらスッキリすると思う。
    [sql]
    DECLARE @d nvarchar(50)
    SET @d = N’C:\database\backup’
    exec master..xp_cmdshell ‘dir @{d} /b’
    — とか
    exec master..xp_cmdshell ”’dir’ + @d + ‘ /b”’
    [/sql]