データベースミラーリング接続の問題について
データベース ミラーリングは、SQL Server 環境で高可用性と冗長性を確保するために不可欠な戦略です。ただし、ミラーリングを構成すると、サーバーのネットワーク アドレスに到達できない、または存在しないことを示すエラー 1418 などのイライラするエラーが発生することがあります。
この特定のエラーは、2 つの SQL Server インスタンス間でミラーリング セッションを設定しようとすると、両方のデータベースに個別にアクセスできる場合でもよく発生します。この問題は、ミラーリング エンドポイントが相互に通信できない場合に発生します。
この例では、ローカル デスクトップ (192.168.0.80) とミニ PC (192.168.0.85) がミラーリング プロセスに関与しています。ミニ PC は、ミラーリングの「ハイ パフォーマンス」モードを使用して、モバイル アプリケーションの読み取り専用レプリカとして機能することを目的としています。
ポート構成とファイアウォールが正しく調整されているにもかかわらず、ユーザーがミラーリング セッションを開始しようとするとエラー 1418 が発生します。この記事では、この問題に対処するための潜在的な原因と解決策を検討します。
指示 | 使用例 |
---|---|
ALTER ENDPOINT | このコマンドは、SQL Server のデータベース ミラーリング エンドポイントの状態を変更するために使用されます。エラー 1418 を解決するというコンテキストでは、エンドポイントが適切に起動され、指定されたポートでリッスンしていることが保証されます。例: ALTER ENDPOINT [ミラーリング] STATE = STARTED; |
GRANT CONNECT ON ENDPOINT | 特定のログインがミラーリング エンドポイントに接続できるようにします。これは、データベース ミラーリング中に SQL Server インスタンスが安全に通信できるようにするために重要です。例: GRANT CONNECT ON ENDPOINT::[Mirroring_Endpoint] TO [DOMAINUserAccount]; |
SET PARTNER | 1 つの SQL Server インスタンスをデータベース ミラーリング セッションのパートナーとして構成します。このコマンドは、パートナー サーバーのネットワーク アドレスを確立します。例: ALTER DATABASE YourDatabaseName SET PARTNER = 'TCP://192.168.0.85:5022'; |
CREATE ENDPOINT | 特定のポートをリッスンし、データベース ミラーリング セッションを管理するミラーリング エンドポイントを作成します。通信の役割 (パートナーなど) を指定します。例: CREATE ENDPOINT [Mirroring_Endpoint] AS TCP (LISTENER_PORT = 5022) FOR DATABASE_MIRRORING (ROLE = PARTNER); |
netsh advfirewall firewall add rule | SQL Server とミラーリングに必要な特定のポート (1433 や 5022 など) を通過するトラフィックを許可するファイアウォール ルールを構成するために使用されます。これは、ミラーリング パートナー間の通信を可能にするために不可欠です。例: netsh advfirewall ファイアウォール追加ルール名 = "SQLPort" dir=in action=allow protocol=TCP localport=1433 |
socket.create_connection | 指定されたサーバーおよびポートへの TCP 接続を確立するために使用される Python コマンド。このコンテキストでは、SQL Server インスタンスがネットワーク経由で到達可能かどうかを確認するために使用されます。例:socket.create_connection((サーバー, ポート), タイムアウト=5); |
New-Object System.Net.Sockets.TcpClient | ポート接続をテストするための TCP クライアントを作成するために使用される PowerShell コマンド。これは、必要なミラーリング ポートが開いており、サーバー間でアクセスできるかどうかを確認するのに役立ちます。例: $tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port) |
SELECT * FROM sys.database_mirroring | この SQL コマンドはデータベース ミラーリング セッションのステータスを取得し、ミラーリング セットアップが正しく確立されているか、問題が発生しているかを診断するのに役立ちます。例: SELECT * FROM sys.database_mirroring; |
ミラーリング エラー解決スクリプトの詳細な内訳
前の例で提供された最初のスクリプトでは、 Transact-SQL (T-SQL) SQL Server のミラーリング エラーを構成および解決するためのコマンド。スクリプトの最も重要な部分は、 エンドポイントのミラーリング。これらのエンドポイントは、ミラーリング中に SQL Server インスタンスが通信するネットワーク インターフェイスです。コマンド エンドポイントの変更 両方のサーバーのエンドポイントが「STARTED」状態になり、通信が可能になることが保証されます。の パートナーを設定する 次に、このコマンドを使用してデータベースをリンクし、パートナー サーバーのネットワーク アドレスを指定します。これにより、2 つの SQL インスタンスがネットワーク全体でデータをミラーリングできるようになります。
2 番目のスクリプトは、2 つのサーバー間のネットワーク接続をテストするために設計された PowerShell ソリューションです。 PowerShell では、 新しいオブジェクト System.Net.Sockets.TcpClient コマンドを使用して、指定された IP アドレスとポートへの接続を試行する TCP クライアントを作成します。これは、必要なポート (SQL Server の場合は 1433、ミラーリングの場合は 5022) が開いており、アクセス可能であることを確認する効率的な方法です。このスクリプトは、2 つの SQL インスタンスの通信を妨げている可能性があるファイアウォールまたはネットワークの問題を診断する場合に特に役立ちます。 エラー1418。
3 番目のスクリプトは、Windows コマンド プロンプト コマンドを利用してファイアウォール設定を管理します。具体的には、 netsh advfirewall ファイアウォール追加ルール コマンドは、SQL Server とミラーリングに必要なポートを開くために使用されます。これにより、データベース トラフィック (ポート 1433) とミラーリング トラフィック (ポート 5022) の両方が 2 つのサーバー間で自由に流れることが保証されます。ファイアウォールを一時的に無効にすることで、 netsh advfirewall はすべてのプロファイルの状態をオフに設定します コマンドを使用すると、スクリプトはファイアウォールがネットワーク アクセス問題の根本原因であるかどうかを確認できます。このソリューションは、安全な環境でサーバー通信の問題をトラブルシューティングする場合に特に重要です。
最後に、Python スクリプトは ソケット.create_connection 2 つのサーバー間のネットワーク チェックを実行する機能。このスクリプトは、サーバーが必要な TCP ポートを介して相互に接続できるかどうかを検証するための迅速かつ効果的な方法を提供します。接続の確立を試み、成功した場合は、ネットワーク設定が正しいことを確認します。 Python はネットワーク関連の問題を簡単に処理できるため、特に他のツールが利用できない、または使用が面倒な環境での接続テストに適しています。これらのスクリプトを組み合わせることで、問題を解決するための包括的なアプローチが提供されます。 データベースミラーリング エラーを回避し、SQL Server インスタンス間のスムーズな通信を確保します。
解決策 1: SQL Server データベース ミラーリングのエラー 1418 を修正する (T-SQL アプローチ)
このソリューションは、Transact-SQL (T-SQL) を使用して、エンドポイントの構成、接続の認証、サーバー アドレスの検証によってデータベース ミラーリングの問題を解決します。
-- Enable server to listen on the specified ports
ALTER ENDPOINT [Mirroring]
STATE = STARTED;
GO
-- Ensure both databases are in FULL recovery mode
ALTER DATABASE YourDatabaseName
SET RECOVERY FULL;
GO
-- Create mirroring endpoints on both servers
CREATE ENDPOINT [Mirroring_Endpoint]
STATE = STARTED
AS TCP (LISTENER_PORT = 5022)
FOR DATABASE_MIRRORING (ROLE = PARTNER);
GO
-- Grant CONNECT permissions to the login account
GRANT CONNECT ON ENDPOINT::[Mirroring_Endpoint]
TO [DOMAIN\UserAccount];
GO
-- Set up mirroring using T-SQL command
ALTER DATABASE YourDatabaseName
SET PARTNER = 'TCP://192.168.0.85:5022';
GO
-- Verify the status of the mirroring configuration
SELECT * FROM sys.database_mirroring;
GO
解決策 2: SQL Server ポートのアクセス可能性をテストするための PowerShell スクリプト
このソリューションでは、PowerShell を使用してサーバー間のポート接続をテストし、必要なポートが開いていてリッスンしていることを確認します。
# Define server IPs and ports
$server1 = "192.168.0.80"
$server2 = "192.168.0.85"
$port = 5022
# Function to test port connectivity
function Test-Port {
param([string]$server, [int]$port)
try {
$tcpClient = New-Object System.Net.Sockets.TcpClient($server, $port)
Write-Host "$server on port $port is reachable."
$tcpClient.Close()
} catch {
Write-Host "$server on port $port is not reachable."
}
}
# Test both servers
Test-Port -server $server1 -port $port
Test-Port -server $server2 -port $port
解決策 3: SQL Server エラー 1418 の修正 (ファイアウォール構成)
このアプローチでは、Windows コマンド プロンプトを使用してファイアウォール構成をチェックし、両方のサーバーで必要なポート (1433、5022) が開いていることを確認します。
-- Check if SQL Server and mirroring ports are open
netsh advfirewall firewall add rule name="SQLPort" dir=in action=allow protocol=TCP localport=1433
netsh advfirewall firewall add rule name="MirrorPort" dir=in action=allow protocol=TCP localport=5022
-- Disable firewall temporarily for testing purposes
netsh advfirewall set allprofiles state off
-- Enable firewall again after testing
netsh advfirewall set allprofiles state on
解決策 4: サーバー間の TCP 接続を検証する Python スクリプト
このソリューションでは、Python を使用して、TCP 接続をチェックすることで SQL Server インスタンスがネットワーク経由で通信できるかどうかを検証します。
import socket
# Define server IPs and port
server1 = '192.168.0.80'
server2 = '192.168.0.85'
port = 5022
# Function to check connectivity
def check_connection(server, port):
try:
sock = socket.create_connection((server, port), timeout=5)
print(f'Connection successful to {server}:{port}')
sock.close()
except socket.error:
print(f'Cannot connect to {server}:{port}')
# Check both servers
check_connection(server1, port)
check_connection(server2, port)
解決策 5: SQL Server Management Studio (SSMS) GUI 構成
このソリューションでは、コマンド ライン インターフェイスを使用したくないユーザー向けに、SSMS GUI を使用してミラーリングをセットアップする手順を説明します。
1. Open SQL Server Management Studio (SSMS).
2. Right-click your database -> Tasks -> Mirror...
3. Click Configure Security and follow the wizard.
4. Ensure both Principal and Mirror servers are correct.
5. Set the port for the mirroring endpoints to 5022.
6. Complete the configuration and click Start Mirroring.
7. Verify the mirroring status by checking the "Database Properties" window.
SQL Server ミラーリングにおけるネットワークとセキュリティの課題を探る
セットアップするとき SQL Server データベースのミラーリング、見落とされがちな側面の 1 つは、ネットワーク構成とセキュリティ設定の役割です。サーバーのネットワーク アドレスに到達できないことを示すエラー 1418 は、多くの場合、根本的なネットワークの問題が原因で発生します。正しいポート (1433 および 5022) が開かれ、ファイアウォールが無効になっている場合でも、ルーティングや DNS 構成などの他のネットワーク要素が通信障害を引き起こす可能性があります。特にマルチサブネット環境では、両方のサーバーが互いの IP アドレスを適切に解決することが重要です。
もう一つの課題には、 SQLサーバー認証 ミラーリングセットアップ時の設定。データベース ミラーリングでは、プリンシパル サーバーとミラー サーバーの両方が証明書またはドメイン ベースの認証 (Kerberos) を介して相互に認証する必要があります。このセットアップが正しく構成されていない場合、または 2 つのサーバー間のセキュリティ プロトコルに不一致がある場合、エラー 1418 が発生する可能性があります。さらに、SQL Server サービス アカウントには、両方のマシンに対する正しいアクセス許可 (特にミラーリング エンドポイントへのアクセス) が必要です。
最後に、オペレーティング システムの選択もミラーリングの動作に影響を与える可能性があります。 Windows のバージョンが異なると、TCP 接続の処理方法、特にファイアウォール ルールとネットワーク トラフィック ルーティングの管理方法が異なる場合があります。いずれかのサーバーのオペレーティング システムが古いか、ネットワーク ドライバーが一致していない場合、サーバー間の通信が失敗する可能性があります。 OS が最新のパッチで最新であり、適切なサービスが実行されていることを確認することは、エラー 1418 のような接続の問題を解決するために重要です。
SQL Server ミラーリングのセットアップとエラー 1418 に関するよくある質問
- SQL Server ミラーリングでエラー 1418 が発生する原因は何ですか?
- エラー 1418 は通常、2 つのサーバー間の通信障害によって発生します。これはファイアウォール設定が原因である可能性がありますが、正しくありません mirroring endpoints、またはネットワーク接続の問題。
- SQL Server ミラーリング用にポートが開いているかどうかを確認するにはどうすればよいですか?
- を使用します。 telnet コマンドまたはスクリプトなど New-Object System.Net.Sockets.TcpClient PowerShell でポート 1433 と 5022 が開いているかどうかをテストします。
- ミラーリングするには両方のサーバーが同じドメインにある必要がありますか?
- いいえ、ただしドメイン認証を使用するとプロセスを簡素化できます。それ以外の場合は、証明書ベースの認証を使用してセキュリティを保護する必要があります。 mirroring endpoints。
- データベース ミラーリングにおけるエンドポイントの役割は何ですか?
- の CREATE ENDPOINT コマンドは、ミラーリング中に SQL Server インスタンスが通信できるようにするネットワーク インターフェイスを作成します。各サーバーには、機能するミラーリング エンドポイントが必要です。
- 異なる SQL Server バージョンでデータベースをミラーリングできますか?
- いいえ、データベース ミラーリングが正しく動作するには、両方の SQL Server インスタンスが同じバージョンとエディションである必要があります。
データベース ミラーリング エラー 1418 を解決するための最終的な考え方
エラー 1418 のようなデータベース ミラーリング エラーは、多くの場合、サーバー間のネットワークの問題によって発生します。正しいポートが開いており、ファイアウォールが構成されており、エンドポイントが適切に設定されていることを確認すると、この問題を解決できます。
さらに、PowerShell などのツールを使用してネットワーク アクセスを検証し、サーバー間で認証プロトコルが一貫していることを確認すると、成功の可能性が高まります。これらの手順に従うと、高パフォーマンスの操作のための信頼性の高い SQL Server ミラーリングを実現できます。
データベース ミラーリング ソリューションの参考資料とリソース
- SQL Server ミラーリングの構成とトラブルシューティング (エラー 1418 やエンドポイント設定など) の詳細については、次の URL を参照してください。 Microsoft SQLドキュメント 。
- SQL Server ミラーリングのファイアウォール ルールの構成とネットワークのトラブルシューティングに関する包括的なガイドには、次の場所からアクセスできます。 Windows ファイアウォールの構成 。
- SQL Server インスタンス間のポート テストとネットワーク検証用の PowerShell スクリプトは、次の場所から入手できます。 PowerShell ドキュメント 。
- サーバー接続のテストに使用される Python ソケット プログラミング手法については、次のサイトを参照してください。 Pythonソケットモジュール 。