Экспорт данных из Prod в нижнюю среду Daily на основе столбца Date - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь настроить процесс, который экспортирует ежедневные данные из промежуточных таблиц производства в промежуточные таблицы тестирования. Я хотел бы запланировать этот экспорт ежедневно из Prod в Test. Эти промежуточные таблицы содержат ежедневные данные. Итак, есть ли способ урезать промежуточные таблицы теста, а затем загрузить данные из производства в ежедневный тест для всех таблиц в базе данных?

Я пытался использовать связанный сервер. Но я не смог получить это работа.

1 Ответ

0 голосов
/ 16 мая 2019

Я написал эту хранимую процедуру на своей работе, чтобы справиться с подобной ситуацией, которая может быть вам полезна:

CREATE Proc DumpFromPRO(@prodServ sysname, @prodDBname sysname = null) as
declare @sql nvarchar(MAX)
declare @XD table (ts sysname,tn sysname)

set nocount on

if not exists (select 1 from sys.servers where is_linked=1 and name=@prodServ)
begin
    raiserror ('Linked server not found.',19,1) with log
    set noexec on
end
if @prodDBname is null
    select top 1 @prodDBname = TABLE_CATALOG from INFORMATION_SCHEMA.TABLES

set @sql = ''
select @sql +=
          'alter table ' + quotename(TABLE_CATALOG) + '.' + TABLE_SCHEMA + '.' + TABLE_NAME + ' nocheck constraint all; '
        + 'alter table ' + quotename(TABLE_CATALOG) + '.' + TABLE_SCHEMA + '.' + TABLE_NAME + ' disable trigger all; '
from INFORMATION_SCHEMA.TABLES
where TABLE_TYPE = 'BASE TABLE'
exec (@sql)

set @sql = ''
select @sql +=
          'delete ' + quotename(TABLE_CATALOG) + '.' + TABLE_SCHEMA + '.' + TABLE_NAME + ' with (TABLOCK); '
        + 'alter index all on ' + quotename(TABLE_CATALOG) + '.' + TABLE_SCHEMA + '.' + TABLE_NAME + ' rebuild; '
from INFORMATION_SCHEMA.TABLES
where TABLE_TYPE = 'BASE TABLE'
exec (@sql)

select @sql =
     'select schema_name(t.schema_id) as ts,t.name as tn from '+quotename(@prodServ)+'.'+quotename(@prodDBname)
    +'.sys.tables t join '+quotename(@prodServ)+'.'+quotename(@prodDBname)
    +'.sys.partitions p on (t.object_id=p.object_id and p.index_id in (0,1)) '
    +'group by schema_name(schema_id),t.name having sum(p.rows)>0'

insert @XD exec (@sql)

set @sql = ''
select @sql +=
    case
        when exists (
            select 1 from sys.columns
            where [object_id] = object_id(t.TABLE_SCHEMA+'.'+t.TABLE_NAME)
                and is_identity = 1)
        then  'set identity_insert ' + quotename(TABLE_CATALOG) + '.' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME + ' on; '
        else  ''
    end
    + 'insert ' + quotename(TABLE_CATALOG) + '.' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME + ' with (TABLOCK) ('
    + stuff((select ', ' + COLUMN_NAME
              from INFORMATION_SCHEMA.COLUMNS
              where TABLE_SCHEMA = t.TABLE_SCHEMA and TABLE_NAME = t.TABLE_NAME
                and DATA_TYPE not in ('timestamp','rowversion')
              for xml path('')), 1, 2, '')
    + ') select ' 
    + stuff((select ', ' + COLUMN_NAME
              from INFORMATION_SCHEMA.COLUMNS
              where TABLE_SCHEMA = t.TABLE_SCHEMA and TABLE_NAME = t.TABLE_NAME
                and DATA_TYPE not in ('timestamp','rowversion')
              for xml path('')), 1, 2, '')
    + ' from ' + quotename(@prodServ) + '.' + quotename(@prodDBname) + '.' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME + '; ' +
    case
        when exists (
            select 1 from sys.columns
            where [object_id] = object_id(t.TABLE_SCHEMA+'.'+t.TABLE_NAME)
                and is_identity = 1)
        then  'set identity_insert ' + quotename(TABLE_CATALOG) + '.' + t.TABLE_SCHEMA + '.' + t.TABLE_NAME + ' off; '
        else  ''
    end
from INFORMATION_SCHEMA.TABLES t
join @XD x on (t.TABLE_SCHEMA=x.ts and t.TABLE_NAME=x.tn)
where TABLE_TYPE = 'BASE TABLE'
exec (@sql)

set @sql = ''
select @sql +=
      'alter table ' + quotename(TABLE_CATALOG) + '.' + TABLE_SCHEMA + '.' + TABLE_NAME + ' check constraint all; '
    + 'alter table ' + quotename(TABLE_CATALOG) + '.' + TABLE_SCHEMA + '.' + TABLE_NAME + ' enable trigger all; '
from INFORMATION_SCHEMA.TABLES
where TABLE_TYPE = 'BASE TABLE'
exec (@sql)

DBCC CheckConstraints with ALL_CONSTRAINTS
set noexec off
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...