タグ: SQL Server

  • SQL ServerのDBを読み取り専用にする方法

    SQL Serverのデータベースを読み取り専用(リードオンリー)する、または解除するには、次のことを行う。

    1. SQL Server Management Studio (SSMS) を使い、管理権限のあるユーザで接続する。

    2. 対象のDBを選択して、右クリックして、プロパティを開く。

    3. オプションを開く。

    4. 「状態」の中にある「読み取り専用データベース」の項目を探す。

    5. 「読み取り専用」にする場合は、プルダウンで「True」を選択する。読み取り専用を解除する場合は「False」を選択する。

    6. 「OK」をクリックする。これを行うと、一度、該当DBへのすべての接続が切断されるので注意すること。

  • Veeam Backup ver.11aでWindows Server 2003上のSQL Serverのバックアップ指定でエラーになる

    Veeam Backup Ver.11a で、ESXi上の仮想マシンのバックアップを取るとき、Windows Server 2003(Windows Server 2003 R2)の仮想マシンで、SQL ServerやOracle Databaseのバックアップを行うオプションを指定している場合、Ver.11aではWindows Server 2003(2003 R2)は、サポート対象外になっているため失敗する。

    Veeam Backupで表示されていたエラーは下記。

    Failed to prepare guest for hot backup. Error: Unable to perform application-aware processing: Microsoft Windows Server 2003 (Standard) guest OS is not supported 
    Error: Unable to perform application-aware processing: Microsoft Windows Server 2003 (Standard) guest OS is not supported

    Veeam Backup Ver.11aは、仮想マシンとしてはESXiで動作しているものはバックアップが正常に取得できる。Ver.11aでWindows Server 2003などのVeeam Backup 対象外のOSは、バックアップ設定で、「Enable application-aware processing」や「Enable guest file system indexing」のチェックを外し、設定を無効化することで、仮想マシンのイメージとしてのみ、バックアップがされるようになる。これでエラーは発生しない。

    仮想マシンのバックアップだが、バックアップの指定方法によっては、バックアップの対象外になるため、注意が必要。

  • SQL Serverで「RPC に対して構成されていません」エラーが出たときの対処

    SQL Server 2005から、SQL Server 2019へのリンクサーバで、リンクサーバ先のプロシージャーを起動させたら、下記のRPCのエラーがでた。

    RPC に対して構成されていません。

    下記の方法で対処した。

    1.SQL Server Management Studioで、リンクサーバを選択して、「プロパティ」を開く。

    2.プロパティの「サーバー オプション」を開く。

    3.「RPC出力」の箇所を、「True」に変更する。

    これで、もう一度実行してみる。

  • SQL Server 2022 Express Editionもデータベースのサイズは10GBまで。

    SQL Server 2022が正式に公開された。SQL Server 2022にも、Expressエディションがあるので、データベースのサイズの制限を調べた。

    SQL Server 2022も、2019などと変らず、1つのデータベースのサイズは10GBまで。Windows版もLinux版もかわらない。CPUの制限も変わらず、1ソケット or 4コア のどちらか低い方だ。

    SQL Server 2022の各エディションの制約の違いについては、下記のMicrosoftのサイトに記載されている。

    https://learn.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2022?view=sql-server-ver16

    そのうち、Express Editionでもデータベースのサイズが無制限になるといいのだけど。まぁ、10GBは、なかなか超えることはないけれど、ただログサイズも含めるので、そうなるとログの切り捨てをしないと、たまに制限にかかるので。

  • SQL Server 2022 のリリースが近い。

    SQL Server 2022がリリース候補版になったとのこと。

    https://www.itmedia.co.jp/news/articles/2208/26/news085.html

    リリース候補版が発表されたので、今年の秋(2022年秋)には正式リリース版が出そうである。SQL Server 2019を入れたばかりなのだが。そんなに機能をフル活用しないので、SQL Server 2022にしておきたかった。タイミングが合わないものである。

    SQL Server 2022がリリースされたら、Express Editionか、MSDNで試すかな。

  • SQL Serverで分散トランザクションのエラーが出たときの対処

    Windows Server 2022とSQL Server 2019組み合わせで、リンクサーバの設定をして、リンクサーバのテーブルにアクセスしたところ、下記のメッセージが表示された。

    分散トランザクションを開始できなかったので、この操作を実行できませんでした。

    これの対処して、下記の手順で設定変更を行う。

    1.Windowsキーを押して、「コンポーネント サービス」(途中に半角スペースあり)と入力して、コンポーネント サービスを起動する

    2.「コンソール ルート」→「コンポーネント サービス」→「コンピューター」→「マイ コンピューター」→「Distributed Transaction Coordinator」→「ローカル DTC」の順に選択する

    3.「ローカル DTC」を右クリックし、プロパティを開く

    4.プロパティの「セキュリティ」タブを選択する

    5.下記の5つにチェックを入れて、適用をクリックする。

        * ネットワーク DTC アクセス
        * リモートクライアントを許可する
        * リモート管理を許可する
        * 受信を許可する
        * 送信を許可する

    6.MSDTCサービスの停止と再開の警告がでるので、「はい」をクリックする。成功すると、MSDTCサービスを再開した旨のポップアップがでる。

    7.SQL Serverのサービスを再起動する(もしくはOSを再起動する)

    これを、リンクサーバで設定する相互のサーバで行う。

    参考)

  • SQL Server 2019でsaでログインできない

    SQL Server 2019で、インストール後に、saでログインしようとしたらエラーでログインできず。サーバー認証は「SQL Server 認証モードと Windows 認証モード」にしてある。パスワードはインストール時に設定したものと同じはず。

    念のため、saのパスワードを再設定したところ、無事にログインできた。

  • SQL Serverのプロシージャー作成でANSI_NULLSオプションのエラーが発生

    古いSQL Server 2005 からバージョンの新しいSQL Server 2019に、プロシージャーを移行しようとしたところ、下記のエラーが表示され、プロシージャーが作成できなかった。

    異種クエリでは接続時に ANSI_NULLS オプションと ANSI_WARNINGS オプションが設定されている必要があります。これは一貫したクエリ セマンティクスを保証します。これらのオプションを有効にし、クエリを再実行してください。

    これの対応として、プロシージャーの最初に、「SET ANSI_NULLS ON」と「SET ANSI_WARNINGS ON」の設定を追加した。これを追加した後に、実行すると、正常にプロシージャーの作成ができた。

    参考)

    SET ANSI_NULLS ON 
    GO 
    SET QUOTED_IDENTIFIER ON 
    GO 
    SET ANSI_NULLS ON 
    GO 
    SET ANSI_WARNINGS ON 
    GO
  • リンクサーバのテーブルにアクセスするSQL

    リンクサーバのテーブルにアクセスするには、「[リンクサーバー名].[DB名].dbo.[テーブル名]」の形式でテーブルにアクセスする。これを、SELECT文、INSERT文などにすると、下記のようになる。

    SELECT * FROM [リンクサーバー名].[DB名].dbo.[テーブル名];
    INSERT INTO [リンクサーバー名].[DB名].dbo.[テーブル名] (カラム名, カラム名) VALUES ('値', '値');
    UPDATE  [リンクサーバー名].[DB名].dbo.[テーブル名]  SET 列名 = 値 ;
    DELETE FROM [リンクサーバー名].[DB名].dbo.[テーブル名];
  • SQL Serverのデータベースコピーができる条件

    SQL Server Management Studio(SSMS)で、タスクからデータベースのコピーを選べるものと選べないものがある。ずっと、なんでなんだろうかと思っていた。やっと理由がわかった。SSMSからデータベースのコピーができないのは、そのデータベースがSQL ServerのExpress Editionだからだ。または、SQL ServerのStandard Editionであっても、SQL Server Agentのサービスが起動していないとき。

    SSMSでデータベースのコピーができるのは、以下の2つの条件を満たしているもののみ。

    • SQL ServerのStandard Edition以上(Express Editionではできない)
    • SQL Server Agentのサービスがコピー元とコピー先で起動していること。(起動していないと失敗する)

    SSMSのバージョンか、設定だと思っていたが、SSMSではなくて、SQL Serverの問題だった。

    参考URL

    https://docs.microsoft.com/ja-jp/sql/relational-databases/databases/use-the-copy-database-wizard?view=sql-server-ver15