sql >> データベース >  >> RDS >> Sqlserver

SQLServerタスク自動化の基本

    これは、主に基本的な概念に焦点を当てたSQLServerの自動化に関する紹介記事です。初心者がSQLServerの自動化を開始するのに役立つ、いくつかの標準的な方法といくつかの例について説明します。

    この記事では、SQL Serverタスクを自動化して、これらのタスクを手動で実行するために必要な時間と労力を節約することの重要性についても説明します。

    さらに、自動化によって時間と労力が節約されるにもかかわらず、SQLサーバーのタスクを自動化することが適切でない場合についても見ていきます。

    SQLServerの自動化について

    まず、「自動化」という用語と、SQLServerタスクの自動化とは正確に何であるかを理解しましょう。

    自動化とは何ですか?

    自動化とは、さまざまなことを網羅する広義の用語ですが、一般的には、人間の介入をほとんどまたはまったく必要とせずに一連のタスクを自動的に実行できるプログラミングツールとデバイスを意味します。

    SQL Server Automationとは何ですか?

    SQL Serverの自動化にはいくつかの意味がありますが、時間と労力を節約するためにSQLServerの管理タスクを自動化することが最も一般的です。

    SQL Serverおよびホストされているデータベースの管理を担当するデータベース管理者またはインフラストラクチャチームは、さまざまな方法で自動化し、指定された間隔で実行するようにスケジュールできるデータベース保守タスクの実行に多くの時間を費やすことがよくあります。

    この記事では、主にSQLServer管理タスクの自動化に焦点を当てています。

    SQLタスクを自動化する必要がある場合

    SQL Serverの管理タスクを自動化するには、実装する前に慎重に計画する必要があります。バックアップ、データベースメンテナンス、データベースモニタリングなどのSQL管理タスクは、他の問題を引き起こすことなく目的を果たす場合、理想的には自動化する必要があります。

    SQLタスクを自動化すべきでない場合

    ほとんどの場合、自動化は非常に便利ですが、手動で実行する方がよいタスクがいくつかあります。

    たとえば、データベース管理タスクの完了に5分かかり、そのタスクの自動化に自動化スクリプトの作成とテストに15時間かかる場合は、このタスクを手動で実行する方が効果的です。bacsql

    自動化してはならない特定のタスクがあります。たとえば、データベースをライブサーバーにデプロイする前に、データベースの変更を確認することは、多くの場合DBAの仕事の一部です。これは、変更がターゲットデータベースと互換性があることを確認するために行われます。このタスクを自動化すると、メリットよりもリスクが高くなるため、そのままにしておくことをお勧めします。

    一般的に言って、データベースタスクが手動の介入を必要とする場合(つまり、次のステップ/ステージに進むために人/チームがそれを確認または管理する必要がある場合)、そのタスクを完全に自動化することはあなたの会社のトップマネジメントによって承認されない限り、実現可能ではありません。

    SQL自動化の例

    次に、SQL自動化の例をいくつか見てみましょう。

    データベースバックアップシナリオ(DBAパースペクティブ)

    データベース管理者(DBA)は企業データベースを管理し、その日常業務にはデータベース関連の要求の処理やデータベースサーバーの管理が含まれます。

    DBAは、ほとんどの時間をデータベースへの小さな変更の管理と展開、およびデータベースサーバーの管理に費やしています。

    DBAは、次の一貫したタスクを実行する必要があります。

    1. 各営業日の終わりにデータベースの毎日のバックアップを作成します
    2. 各週末に毎週バックアップを作成する
    3. 月末に毎月のバックアップを作成します。

    毎日のバックアップには30分かかります。これは、DBAがその日に出発するときに最後に行うことです。毎日のバックアッププロセスが開始されるとマルチタスクを実行できますが、バックアップが確実に終了するようにする方法を監視する必要があります。これは、準備ができたらバックアップをバックアップディスクに保存する必要があるためです。

    毎週および毎月のバックアップに費やされた時間を無視しても、データベースにはますます多くのデータが含まれるため、このプロセスを実行するほど、毎日のバックアップを完了するために必要な時間が長くなります。最初に毎日のバックアップを実行するのに30分かかる場合でも、データベースシステムのデータの増加に応じて、この時間は数週間または数か月で約1時間に増加する可能性があります。

    これは不変のタスクであり、常に繰り返さなければならないため、DBAが退屈したり、集中力を失ったり、ミスをしたり、1日か2日を逃したりする可能性があります。

    DBAがこのSQLタスクを自動化すると、時間と労力を節約できるだけではありません。間違いを犯す可能性は最小限に抑えられます。

    毎日のバックアッププロセスは、データベースの相互作用が少ない夜間に開始するようにスケジュールできます。翌日、DBAはバックアップを確認し、(以前はバックアッププロセスに使用されていた)稼働日の最後の1時間を、より重要で緊急のタスクに利用できます。

    データベースの開発と展開のシナリオ

    データベースの開発と展開の非常に一般的な例を考えてみましょう(この記事の範囲内にとどまるために、テストを意図的に除外しています)。データベース開発者は、SQL Serverデータツール(SSDT)などのデータベース開発ツールを使用して、データベースに新しいテーブルを追加します。これが完了すると、SQLデータベースプロジェクトに変更が保存されます。これらの変更は、DBAまたはインフラストラクチャチームに送信されます。インフラストラクチャチームは、これらの変更を確認して、ライブサーバーにデプロイする必要があります。

    重要なポイントは次のとおりです。

    1. データベース開発者は、標準的な方法に従って、データベースの変更をライブサーバーに直接公開しないでください
    2. データベース管理者またはライブサーバーを管理するインフラストラクチャチームは、データベースの一貫性に異議を唱えないように、これらの変更を確認する前に、ライブデータベースへの変更を公開することはできません。

    説明した内容から理解できるように、データベースの開発と展開のタスクを完全に自動化することは実用的ではなく、多くのセキュリティリスクをもたらします。

    したがって、最善の決定は、DBAまたはインフラストラクチャチームに依存する手順を自動化することです。

    データベースインデックスのメンテナンスタスク

    データベースインデックスは、データベースから結果セット(行)をより迅速に取得する上で重要な役割を果たします。ただし、これらのインデックスは時間の経過とともにメンテナンスが必要です。データベースインデックスのメンテナンスは、オフピーク時に手動で実行することも、自動で実行することもできます。これは非常に時間のかかるタスクになる可能性があるため、特にデータベースサーバーに関連するものが他にもたくさんある場合は、このタスクを自動化することをお勧めします。

    ただし、一部の専門家はこの観点に異議を唱え、プロセスを監視するため、またはこれを完全に手動で行うために、インデックスの保守をある程度制限することを推奨しています。

    インデックスのメンテナンスに関しては、次のことがデータベースインデックスのパフォーマンスを向上させる可能性があります。

    1. インデックスの再構築
    2. インデックスの再編成
    3. デフラグインデックス
    4. 統計の更新

    SQLタスクを自動化する方法

    次に、SQLタスクを自動化するための基本的な要件を見てから、非常に簡単な例を見てみましょう。

    サンプルデータベースのセットアップ

    このウォークスルーには、 UniversityV6と呼ばれる次の単一テーブルのサンプルデータベースが必要です。 次のように設定します:

    -- (1) Create the UniversityV6 sample database
    CREATE DATABASE UniversityV6;
    GO
    
    USE UniversityV6
    
    CREATE TABLE [dbo].[Student] (
        [StudentId] INT           IDENTITY (1, 1) NOT NULL,
        [Name]      VARCHAR (30)  NULL,
        [Course]    VARCHAR (30)  NULL,
        [Marks]     INT           NULL,
        [ExamDate]  DATETIME2 (7) NULL,
        CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ([StudentId] ASC)
    );
    GO

    スクリプトを実行してサンプルデータベースを作成します:

    SQLServerエージェントの起動

    別のルートを選択しない限り、SQLタスクの自動化は通常SQLServerエージェントに依存します。

    最初に必要なことは、SQLServerエージェントが実行されていることを確認することです。実行されていない場合は、手動で起動して実行を継続する必要があります。

    SQL Serverインスタンスに接続し、オブジェクトエクスプローラーでSQLServerエージェントノードを探します。このノードに赤い「停止」アイコンが表示されている場合は、まだ開始されていません:

    を右クリックします SQLServerエージェント ノードをクリックし、開始:をクリックします

    次に、サーバーでSQLServerエージェントサービスを開始することを確認する必要があります。 はいをクリックします これを行うには:

    起動すると、SQLServerエージェントの横に小さな緑色のアイコンが表示されます。今すぐノードを展開することもできます:

    新しいジョブを作成する

    ジョブを右クリックします フォルダをクリックし、新しいジョブ…をクリックします :

    BackupUniversityV6自動タスク」と入力します 」をクリックし、ステップをクリックします 左側のナビゲーションバー:

    新しいジョブステップを追加する

    次に、[新規]をクリックします 、ステップ名として「Backup UniversityV6」と入力し、次のSQLスクリプトを追加して、[ OK]をクリックします。 :

    -- Backup the UniversityV6 sample database using the date time stamp
    DECLARE @BackupName VARCHAR(100)
    SET @BackupName=CONCAT('C:\Backup\UniversityV6-',FORMAT(GETDATE(),'yyyy-MM-dd-hh-mm-tt'),'.bak')
    BACKUP DATABASE UniversityV6 TO [email protected] WITH COMPRESSION, INIT;
    GO

    OKをクリックします ジョブの設定を完了します。

    作成されたジョブを表示する

    SQL Serverエージェントまで下にスクロールして、新しく作成されたジョブを見つけます。

    ジョブのテスト実行(自動タスク)

    BackupUniversityV6自動タスクを右クリックします ステップでジョブを開始…:をクリックします

    ジョブは開始および終了します:

    バックアップ場所を確認する

    次に、この自動化されたタスクが新しいバックアップを作成した場所に移動します。

    おめでとう!これで、データベースバックアップを作成するタスクが正常に自動化されました。ドライブ文字名を変更するだけで、任意のバックアップドライブを保存できるようになりました。

    システムドライブC:以外のバックアップドライブに常にバックアップを保存する必要があることに注意してください。ジョブを右クリックしてPをクリックすると、このタスクを頻繁に実行するようにスケジュールできます。 プロパティ 、[スケジュール]をクリックします :

    やるべきこと

    基本的なデータベースバックアップタスクを自動化できるようになったので、スキルを向上させるために次のことを試してください。

    1. テストとして、このタスクを毎日午後に1週間実行するようにスケジュールします
    2. Statsという名前の新しいテーブルを作成します 次の列を持つサンプルデータベース内:
      1. StatID(INT)
      2. StatDate(DATETIME2)
      3. TotalRows(INT)

    次に、学生の行数をログに記録する自動タスク(新しいジョブ)を作成して、自分自身をテストします。 統計の日付/時刻と一緒に表 テーブル。 Studentテーブルに頻繁に入力してみてください。

    1時間ごとに実行するようにタスクをスケジュールし、統計かどうかを確認します テーブルには、1時間ごとのテーブルの行数が表示されるため、データの挿入が反映されます。


    1. .phpファイルを使用してMySQLダンプを生成する

    2. OracleのLOWER()関数

    3. OracleでBLOBからファイルを取得する方法は?

    4. BLOBを除くすべてのフィールドでSELECTDISTINCTを実行するにはどうすればよいですか?