none
リモートのSQLServerの設定を確認する方法について RRS feed

  • 質問

  • 社内にある複数のSQLServerの設定を確認したいです
    確認したい項目は、
    ・SQLサーバのメモリの使用設定(最少メモリ設定)
    ・DBファイル(dbf)、ログファイル(ldf)の初期値設定
    ・TempDBサイズ
    ・データベースモデル
    です。

    ただ調査対象のサーバが多数あるため、リモートから(バッチのような)コマンドで
    取得したいです。
    (1台1台ログインしてGUIで確認ではなく、対象サーバを列挙したファイルを
     読み込んでバッチで確認のようなイメージ)
    このようなことは、実現可能でしょうか。


    JUN123

    2016年8月10日 2:12

回答

  • 分けて考えるとさほど難しくないと思います。

    ①情報を取得するSQLを作成する(サーバのメモリ設定、DBの実ファイルサイズ(tempdb含む)、データベース復旧モデル)

    ②上記のSQLを呼び出すコマンドを作成し、対象の環境毎にテキスト出力する。

    ちなみに①は

    sp_configure 'min server memory'
    GO
    
    sp_configure 'max server memory'
    GO
    
    BEGIN TRY
    	--一時テーブル:結果保持用を作成
    	CREATE TABLE #TEMP1
    		( DATABASE_NAME			NVARCHAR(128)	NOT NULL
    		, DATABASE_FILE_NAME	NVARCHAR(128)	NOT NULL
    		, SIZE					INT				NOT NULL
    		)
    	ALTER TABLE #TEMP1 ADD CONSTRAINT PK_TEMP1 PRIMARY KEY (DATABASE_NAME, DATABASE_FILE_NAME)
    
    	INSERT INTO #TEMP1(DATABASE_NAME, DATABASE_FILE_NAME, SIZE)
    		EXEC sp_MSforeachdb "USE [?];SELECT '?', name, size * 8 FROM sys.database_files";
    
    	SELECT * FROM #TEMP1
    
    	DROP TABLE #TEMP1
    END TRY
    BEGIN CATCH
    	PRINT ERROR_MESSAGE()
    	IF OBJECT_ID('tempdb..#TEMP1') IS NOT NULL
    	BEGIN
    		DROP TABLE #TEMP1
    	END
    END CATCH
    GO
    
    SELECT name, recovery_model_desc FROM sys.databases
    GO
    
    ②は下記のコマンドを並べるだけ(-i以外のスイッチは各々異なる)

    sqlcmd -S [サーバ\インスタンス] -U [ユーザ] -P [パスワード] -i [①のt-sqlファイルパス] > [出力パス]

    以上で如何でしょうか?

    • 回答としてマーク JUN123 2016年8月14日 23:55
    2016年8月11日 6:58

すべての返信

  • 分けて考えるとさほど難しくないと思います。

    ①情報を取得するSQLを作成する(サーバのメモリ設定、DBの実ファイルサイズ(tempdb含む)、データベース復旧モデル)

    ②上記のSQLを呼び出すコマンドを作成し、対象の環境毎にテキスト出力する。

    ちなみに①は

    sp_configure 'min server memory'
    GO
    
    sp_configure 'max server memory'
    GO
    
    BEGIN TRY
    	--一時テーブル:結果保持用を作成
    	CREATE TABLE #TEMP1
    		( DATABASE_NAME			NVARCHAR(128)	NOT NULL
    		, DATABASE_FILE_NAME	NVARCHAR(128)	NOT NULL
    		, SIZE					INT				NOT NULL
    		)
    	ALTER TABLE #TEMP1 ADD CONSTRAINT PK_TEMP1 PRIMARY KEY (DATABASE_NAME, DATABASE_FILE_NAME)
    
    	INSERT INTO #TEMP1(DATABASE_NAME, DATABASE_FILE_NAME, SIZE)
    		EXEC sp_MSforeachdb "USE [?];SELECT '?', name, size * 8 FROM sys.database_files";
    
    	SELECT * FROM #TEMP1
    
    	DROP TABLE #TEMP1
    END TRY
    BEGIN CATCH
    	PRINT ERROR_MESSAGE()
    	IF OBJECT_ID('tempdb..#TEMP1') IS NOT NULL
    	BEGIN
    		DROP TABLE #TEMP1
    	END
    END CATCH
    GO
    
    SELECT name, recovery_model_desc FROM sys.databases
    GO
    
    ②は下記のコマンドを並べるだけ(-i以外のスイッチは各々異なる)

    sqlcmd -S [サーバ\インスタンス] -U [ユーザ] -P [パスワード] -i [①のt-sqlファイルパス] > [出力パス]

    以上で如何でしょうか?

    • 回答としてマーク JUN123 2016年8月14日 23:55
    2016年8月11日 6:58
  • ご連絡ありがとうございます。
    教えていただいた方法、さっそく試してみたいと思います。


    JUN123

    2016年8月14日 23:35
  • 回答いただいた方法で、ほしい情報①が取得でき、やりたいこと②も実現できました。
    大変助かりました。
    ありがとうございます。

    JUN123

    2016年8月14日 23:58