Джоб SQL Server 2014

Я нуждаюсь пожалуйста, если мне могут давать идеи, как решать следующее:

Я имею базу данных по отношению к, которую я назову ему Principal что в SQL Server, эта импортирует информацию о других базах данных (Oracle и SQL Server) чтобы показывать ее в системе, которая только манипулирует и показывает информацию о различных формах (доклады, графики, и т.д.).

Импорт этих данных осуществляется посредством одного Job что работает каждые 2 часа (строго необходим этот calendarización, так как информация меняется постоянно).

Job медли около 10 минута с тем, чтобы заканчивать работать и импортировать новую информацию, проблема состоит в том, что в этом периоде времени времени пользователи не могут консультировать данные, потому что у меня есть Job следующей формы (примера):

TRUNCATE TABLE Principal
INSERT INTO Principal
SELECT * FROM TablaDeOtraBaseDatos

Кроме того, если оно последует за какой-то ошибкой с Job уже у меня нет данных.

Какая-то идея как решать это? Р, если он состоит в том, что я врежу Job?

Спасибо.

1
задан 05.05.2017, 22:01
3 ответа

Я осуществил что-то похожее из следующей формы:

  1. Создал таблицу PrincipalTemporal, это должна быть таблица f¦-sica реальная копия idéntica Principal
  2. Реализовала importaci¦n данных в PrincipalTemporal
  3. Проверила правильное функционирование этого процесса
  4. , Если informaci¦n я присоединяю правильно: a) DROP TABLE Principal и потом sp_rename 'PrincipalTemporal', 'Principal'

Из этой формы в случае ошибки не destru¦-mos таблица, конечно мы будем иметь informaci¦n устаревшая, но según сцена у этого может быть меньшая важность, у, которой он ничего не должен не быть.

1
ответ дан 24.11.2019, 09:27
  • 1
    Пожалуйста не делай это если только не будет выполнена серия условий. Например, которого не было í ndices значимые, первичные ключи, forá neas, и т.д. – Lamak 05.05.2017, 22:36
  • 2
    Пользователь уже está делая один ОТСЕКИ ТЕБЯ así что я представляю, что из-за этой стороны не habrí в проблемы – Patricio Moracho 05.05.2017, 22:38
  • 3
    Отсеки тебя он поддерживает í ndices созданные, así как первичные ключи и forá neas если только é sta был главной пластиной. Tambié n нужно волновать triggers и другие вещи – Lamak 05.05.2017, 22:39
  • 4
    Он звучит интересно é sta opció n, но он имеет razó n @Lamak, в моем случае Главная пластина só это у него есть í ndices..., но если я делаю копию Главной пластины из-за script, í ndices deberí an создания tambié n, это не верно? – Alonso Fallas 05.05.2017, 22:41
  • 5
    Если договора @Lamak. – Patricio Moracho 05.05.2017, 22:42

не tunques таблица до того, как освободился informaci¦n, у тебя есть несколько выборов!, те, что приходят мне сейчас, в голову:

Opci¦n 1: Выполнил работу и я наполняю различные подмостки со сходными именами, что потом, который закончил работу, я могу перемещать этот informaci¦n в реальные подмостки! А именно, a).-Я Скроллирую работу, которая продолжается 10 минут, в конце процесса, он отсекает и ты копируешь каждую из подмостков, это будет вопросом секунд.

Opci¦n 2: ты Можешь использовать колонну в каждой таблице, которая стоит тебе ссылкой для того, чтобы определить qué реестр, он старый, и что реестр новый, а именно, я конфигурирую одну из колонн типа INT и в DEFAULT в INSERT, который распределял бы ему номер 0 в каждой из подмостков, которая берет доклады, я конфигурирую, что или я взял доклады только реестры, у которых есть стоимость, 1 в колонне новых , итак, в JOB размещаю, что я наполнил все подмостки, непосредственно вслед удаляю все реестры, которые содержат в стоимость 1, и потом, обновляю все существующие реестры со стоимостью 0 в 1 и serÃ: неистовый.

0
ответ дан 24.11.2019, 09:27

Он рекомендовал бы тебе вместо того, чтобы делать этот процесс, иметь временный table в bd пример: Certificate_Temp главная серьезная Подтверди тебя и делать следующий процесс:

  1. Отсекать временную таблицу
  2. Загружать информацию во временной таблице
  3. Выполнять SP, который делал бы смесь между двумя подмостками используя функцию merge SQL Merge statement

Merge , перемешивает два подмостков в одной, ты можешь показывать ему, что ты хочешь поля, чтобы он обновил, если стоимость существует, или если они должны исчезать или вводить, в зависимости от переменных, которые ты выбираешь, ты подпираешь в конце концов он показывает тебе, что acci¦n я направляю в каждом row update, delete или insert. Восток возьмется за то, чтобы делать себе тяжелую работу из-за тебя, пример ser¦ - в:

MERGE dbo.Certificate AS T
    USING Certificate_Temp AS S
    ON (T.SerialNumber = S.Id) 
    WHEN NOT MATCHED BY TARGET 
        THEN INSERT(SerialNumber,EffectiveDate,ExpirationDate,Expired,Revoked,Subject,UserId,Type) 
        VALUES(S.Id, S.EffectiveDate,S.ExpirationDate,S.Expired,S.Revoked,S.Subject,@UserId,'S')
    WHEN MATCHED 
        THEN UPDATE SET T.ExpirationDate = S.ExpirationDate,T.EffectiveDate = S.EffectiveDate, T.Expired = S.Expired,T.Revoked = S.Revoked
    --WHEN NOT MATCHED BY SOURCE
        --THEN DELETE 
    OUTPUT $action, inserted.*, deleted.*;  

Из этой формы твоя таблица когда бы то ни было estarÃ: недоступный

0
ответ дан 24.11.2019, 09:27