Проблема с разрешениями при использовании SymmetricDS с базой данных SQL Azure - PullRequest
0 голосов
/ 05 июня 2018

У меня есть два движка: 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] завершает работу.

INFO [azure] [AbstractSymmetricEngine] [symbric-engine-startup-1] Остановка SymmetricDS externalId = 001 версия = 3.9.7 база данных = MicrosoftSQL Server

.. и затем узел [postgres] может сказать об этом:

WARN [postgres] [PushService] [postgres-push-default-3] Невозможно нажать на узел «001» в группе «лазурь».URL-адрес синхронизации пуст

URL-адрес синхронизации и URL-адрес регистрации установлены для обоих механизмов, поэтому я предполагаю, что настоящая проблема связана с разрешением.

Вопрос:

Как исправить эту ошибку? Я предполагаю, что мне нужно указать SymmetricDS использовать базу данных, отличную от 'master', но как?

postgres.свойства

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 Ответ

0 голосов
/ 05 июня 2018

В файле azure.properties закомментирована строка с sync.url:

# sync.url=http://localhost:31415/sync/azure-001

Практическое правило заключается в том, что агентmmetricDs должен быть как можно ближе к базе данных, которую он синхронизирует,Один симметричный агент ds должен работать рядом с главным узлом, а другой - в облаке рядом с экземпляром Azure.Вы не сможете синхронизировать базу данных только для чтения.Для правильной работы SymmetricDs необходимы права на запись / чтение, даже создание таблиц, функций, пакетов и триггеров

...