読み取り専用レプリカをセットアップするときに発生する問題を把握しようとしています。読み取り専用レプリカを照会する単純なアプリケーションがあり、@@servername を実行して正しいレプリカにヒットすることを検証できます。すべてが計画どおりに機能します。問題なく同期サーバーにフェールオーバーでき、テスト アプリケーションは引き続きレプリカから読み取ります。
私が抱えている問題は、読み取り専用レプリカを再起動すると、アプリケーションが読み取り専用レプリカに戻らないことです。読み取り専用レプリカがオンラインに戻った後でも、ルーティングで設定されているものに移動します。別のサーバーからの新しい接続は、読み取り専用レプリカにヒットします。テストを実行しているサーバーで別の方法で AG に接続しようとすると、読み取り専用レプリカに接続されます。以下の powershell スクリプトは、引き続き別のサーバーにアクセスします。
アプリケーションを停止し、約 10 分または 15 分待ってからアプリケーションを起動すると、読み取り専用レプリカにヒットします。pooling=false を使用するように接続文字列を設定した場合。次に、レプリカが接続を受け入れる準備ができたら、レプリカをヒットすることにより、想定どおりに動作します。
これは、読み取り専用レプリカのシナリオをテストするために使用しているものです。
function Get-Readonly-Server
{
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=AG_OLTP_Listnr.myenv.local;Database=AGTest;Integrated Security=True;applicationintent=readonly"
$SqlConnection.Open()
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "select @@servername as colName into #tmp; select colName from #tmp; drop table #tmp"
$SqlCmd.Connection = $SqlConnection
$servername = $SqlCmd.ExecuteScalar()
$SqlConnection.Close()
$servername
}
for ($i=1; $i -le 1000000; $i++)
{
Get-Readonly-Server
write-host $i
Start-Sleep -s 1
}
私は何が欠けていますか?それとも私のテストは間違っていますか?