#azure #powershell #azure-sql-database
#azure #powershell #azure-sql-database
Вопрос:
У меня есть база данных SQL Azure на уровне обслуживания Hyper Scale с одной вторичной репликой. Я пытался доказать, что ApplicationIntent=ReadOnly фактически переходит к вторичной реплике. Итак, я создал этот сценарий PowerShell:
$FQTargetServer = "server.database.windows.net"
$SqlServerPort = 1433
$Database = "database"
$SqlUsername = "user"
$SqlPass = "**********"
$command = ""
$dataset = ""
$Conn = New-Object System.Data.SqlClient.SqlConnection("Server=tcp:$FQTargetServer,$SqlServerPort;Database=$Database;ApplicationIntent=ReadOnly;User ID=$SqlUsername;Password=$SqlPass")
$Conn.Open()
$command = new-object system.Data.SqlClient.SqlCommand(
"SELECT DB_NAME() as 'db',DATABASEPROPERTYEX(DB_NAME(), 'Updateability') as 'replica';", $Conn)
$command.CommandTimeout=1200
$command.CommandText
# Execute the SQL command
$dataset=New-Object system.Data.DataSet
$adapter=New-Object system.Data.SqlClient.SqlDataAdapter $command
write-output $adapter.Fill($dataSet) | Out-Null
# Close the SQL connection
$Conn.Close()
$dataset.Tables
Результаты, которые я получаю, следующие:
реплика базы данных
database READ_WRITE
Для меня это указывает на то, что ApplicationIntent по какой-то причине игнорируется. Есть идеи о том, как подключиться к реплике только для чтения?
Спасибо, Dep
Ответ №1:
Когда мы хотим подключиться к реплике, доступной только для чтения, мы должны добавить ApplicationIntent=ReadOnly;
в строку подключения.
Например, следующая строка подключения соединяет клиента с репликой, доступной только для чтения:
Server=tcp:<server>.database.windows.net;Database=<mydatabase>;ApplicationIntent=ReadOnly;User ID=<myLogin>;Password=<myPassword>;Trusted_Connection=False; Encrypt=True;
Пожалуйста, укажите: Подключитесь к реплике только для чтения
И по другой причине мы должны включить масштабирование чтения, которое мы могли бы получить из документа:
- Если вы хотите убедиться, что приложение подключается к основной реплике независимо от параметра ApplicationIntent в строке подключения SQL, необходимо явно отключить масштабирование чтения при создании базы данных или при изменении ее конфигурации. Например, если вы обновляете свою базу данных со стандартного уровня или уровня общего назначения до премиум-уровня, критически важного для бизнеса или гипермасштабируемого уровня и хотите убедиться, что все ваши подключения продолжают поступать к основной реплике, отключите масштабирование чтения. Подробнее о том, как отключить это, см. в разделе Включение и отключение масштабирования чтения.
Другая ссылка: указание намерения приложения
Комментарии:
1. Я полагаю, что это то, что говорится в этой строке в скрипте: Server= tcp: $FQTargetServer,$ SqlServerPort;Database=$ Database;ApplicationIntent= только для чтения; Идентификатор пользователя = $ SqlUsername; Пароль = $ SqlPass «. Вот почему я в замешательстве, почему идентификатор DATABASEPROPERTYEX(DB_NAME(), ‘Updateability’) возвращается для чтения и записи.
2. @Dep Извините, что пропустил это. Вы включили масштабирование чтения для вашей базы данных SQL?
3. @LeonYue Вы подключились к реплике только для чтения?