Проблема с разрешениями при использовании SymmetricDS с базой данных SQL Azure
У меня есть два движка: postgres.properties (главный узел) и azure.properties. Оба на одной машине. Одна база данных является локальной, а другая - в облаке.
Когда SymmetricDS запускается, он дает мне эту ошибку для лазера Azure:
2018-06-05 06:49:30,476 WARN [azure] [JdbcSqlTemplate] [symmetric-engine-startup-1] CREATE TABLE permission denied in database 'master'.. Failed to execute: CREATE TABLE "sym_channel"(
"channel_id" VARCHAR(128) NOT NULL,
"processing_order" INT DEFAULT 1 NOT NULL,
"max_batch_size" INT DEFAULT 1000 NOT NULL,
"max_batch_to_send" INT DEFAULT 60 NOT NULL,
"max_data_to_route" INT DEFAULT 100000 NOT NULL,
"extract_period_millis" INT DEFAULT 0 NOT NULL,
"enabled" SMALLINT DEFAULT 1 NOT NULL,
"use_old_data_to_route" SMALLINT DEFAULT 1 NOT NULL,
"use_row_data_to_route" SMALLINT DEFAULT 1 NOT NULL,
"use_pk_data_to_route" SMALLINT DEFAULT 1 NOT NULL,
"reload_flag" SMALLINT DEFAULT 0 NOT NULL,
"file_sync_flag" SMALLINT DEFAULT 0 NOT NULL,
"contains_big_lob" SMALLINT DEFAULT 0 NOT NULL,
"batch_algorithm" VARCHAR(50) DEFAULT 'default' NOT NULL,
"data_loader_type" VARCHAR(50) DEFAULT 'default' NOT NULL,
"description" VARCHAR(255),
"queue" VARCHAR(25) DEFAULT 'default' NOT NULL,
"max_network_kbps" DECIMAL(10,3) DEFAULT 0.000 NOT NULL,
"data_event_action" CHAR(1),
"create_time" DATETIME,
"last_update_by" VARCHAR(50),
"last_update_time" DATETIME,
PRIMARY KEY ("channel_id")
)
Это связано с тем, что база данных "master" доступна только для чтения в базах данных SQL Azure. Сразу после этого узел [azure] отключается.
ИНФОРМАЦИЯ [azure] [AbstractSymmetricEngine] [simricric-engine-startup-1] Остановка SymmetricDS externalId=001 версия =3.9.7 база данных = Microsoft SQL Server
... а затем узел [postgres] может сказать об этом:
ПРЕДУПРЕЖДЕНИЕ [postgres] [PushService] [postgres-push-default-3] Невозможно отправить на узел '001' в группе 'azure'. URL-адрес синхронизации пуст
URL синхронизации и регистрационный URL установлены для обоих движков, поэтому я предполагаю, что настоящая проблема связана с разрешением.
Вопрос:
Как я могу исправить эту ошибку? Я предполагаю, что мне нужно указать SymmetricDS использовать базу данных, отличную от "master", но как?
postgres.properties
engine.name=postgres
db.driver=org.postgresql.Driver
# The JDBC URL used to connect to the database
db.url=jdbc:postgresql://127.0.0.1/<redacted>
# The user to login as who can create and update tables
db.user=<redacted>
# The password for the user to login as
db.password=<redacted>
registration.url=
sync.url=http://localhost:31415/sync/postgres-000
# Do not change these for running the demo
group.id=postgres
external.id=000
# Don't muddy the waters with purge logging
job.purge.period.time.ms=7200000
# This is how often the routing job will be run in milliseconds
job.routing.period.time.ms=5000
# This is how often the push job will be run.
job.push.period.time.ms=10000
# This is how often the pull job will be run.
job.pull.period.time.ms=10000
# Kick off initial load
initial.load.create.first=true
azure.properties
engine.name=azure
db.driver=com.microsoft.sqlserver.jdbc.SQLServerDriver # located in the libs folder
# The JDBC URL used to connect to the database
db.url=jdbc:jtds:sqlserver://<redacted>
# The user to login as who can create and update tables
db.user=<redacted>
# The password for the user to login as
db.password=<redacted>
sync.url=http://localhost:31415/sync/azure-001
registration.url=http://localhost:31415/sync/postgres-000
group.id=azure
external.id=001
# This is how often the routing job will be run in milliseconds
job.routing.period.time.ms=5000
# This is how often the push job will be run.
job.push.period.time.ms=10000
# This is how often the pull job will be run.
job.pull.period.time.ms=10000
1 ответ
В файле azure.properties
линия с sync.url
закомментировано:
# sync.url=http://localhost:31415/sync/azure-001
Практическое правило заключается в том, что агент mmetricDs должен быть как можно ближе к базам данных, которые он синхронизирует. Один симметричный агент ds должен работать рядом с главным узлом, а другой - в облаке рядом с экземпляром Azure. Вы не сможете синхронизировать базу данных только для чтения. SymmetricDs для правильной работы требуются права на запись / чтение, даже создание таблиц, функций, пакетов и триггеров.