Sybase ASE 15.7 — Как объединить объекты из двух баз данных в одну базу данных?

У меня есть приложение, которое использует Sybase ASE 15.7 для базовой базы данных. Раньше рекомендовалось разделить таблицы и разместить их в двух разных базах данных, скажем, db1 и db2. Я знаю, что конфликтов имен нет, а это значит, что я могу перенести объекты с db1 на db2 или наоборот.

Что было бы лучшим вариантом для переноса данных. У меня есть сценарии SQL для создания всех объектов, которые мне нужны в оставшейся базе данных. Есть ли лучший вариант, чем использовать это:

1> INSERT INTO db2..tblA
2> SELECT * FROM db1..tblA
3> GO

Некоторые столы довольно большие. Поэтому мне нужно позаботиться о том, чтобы журнал транзакций не был заполнен.

BCP также может быть таким вариантом:

bcp db1..tblA out tblA.save -U... -P....
bcp db2..tblA in tblA.save -U... -P....

Есть ли инструмент, который мог бы подключаться к обеим базам данных и обрабатывать что-то подобное?

Может быть, у кого-то есть идея. Заранее спасибо.

С наилучшими пожеланиями

Йенс


person Jens Heinitz    schedule 04.08.2016    source источник


Ответы (1)


Чтобы предотвратить заполнение журнала, вы можете выполнить незарегистрированную операцию. Если это невозможно, вы можете установить параметры БД для усечения контрольной точки журнала во время процедуры копирования, но этого второго метода может быть недостаточно, чтобы журнал не был исчерпан. Если используется незарегистрированная операция, то после завершения необходимо сделать полный дамп БД, чтобы создать резервную копию нового базового состояния. Незарегистрированные операции могут быть опасными, если они выполняются за пределами периода автономного обслуживания.

Обрезать контрольную точку (выполните следующие действия, а затем выполните контрольную точку)

Чтобы включить/выключить режим Truncate, используйте

использовать мастер;

sp_dboption , 'trunc log on chkpt', [false|true];

Чтобы разрешить BCP/выбрать INTO в базе данных (выполните следующие действия, а затем выполните контрольную точку)

использовать мастер;

sp_dboption, 'выбрать в/массовое копирование/plsort', [false|true];

Чтобы выполнить контрольную точку

Для контрольной точки в БД используйте ‘dbname’.

использовать «имя БД»;

пропускной пункт;

Вариант BCP

Если вы решите использовать BCP, убедитесь, что вы используете быстрый BCP. Fast BCP не регистрируется.

Правила, обеспечивающие использование Fast BCP, указаны на странице http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc30191.1570100/doc/html/san1367605064460..html .

Вы можете сделать это в два этапа: «извлечение» (выход), а затем «загрузка» во время выполнения. Команды будут выглядеть примерно так.

SYBASE/$SYBASE_OCS/bin/bcp ${DB1NAME}..${TABNAME} из $DUMPDIR/$DB1NAME/${TABNAME}.TXT -c -U$SQLUSER -P$USERPASS -S$SERVER1NAME

SYBASE/$SYBASE_OCS/bin/bcp ${DB1NAME}..${TABNAME} в $DUMPDIR/$DB1NAME/${TABNAME}.TXT -c -U$SQLUSER -P$USERPASS -S$SERVER1NAME

Чтобы это работало, в БД должна быть установлена ​​опция выбора в / массового копирования БД.

Вам нужно будет сбросить БД после этой операции.

Незарегистрированная операция – выберите "В"

Поскольку у вас есть доступ к обеим базам данных с одного сервера, вам следует взглянуть на использование select into.

«выбрать в» — это незарегистрированная операция.

Целевая таблица для оператора select into не может существовать, поэтому вам нужно будет переместить исходную целевую таблицу с помощью sp_rename, а затем запустить выборку, используя две исходные таблицы в вашем запросе.

Чтобы это работало, для БД необходимо установить параметр выбора в/массовое копирование БД.

Вам нужно будет сбросить БД после этой операции.

Это может быть медленным из-за заявления Союза. Также объединение не является хорошим вариантом, если строки не уникальны.

Индексы

В общем, если в целевой таблице есть большой индекс (особенно кластеризованный), вероятно, было бы более эффективно удалить его во время копирования и воссоздать его впоследствии.

person london-deveoper    schedule 22.01.2017