Я некоторое время бился с этим, поэтому я наконец-то попросил несколько предложений.У нас есть, к сожалению, очень хорошо спроектированная таблица, которая работает недостаточно хорошо, и она существует достаточно долго, и многие клиенты вложили в нее около 50 миллионов строк.
Я экспериментировал со способамиисправление структуры таблицы, но, очевидно, самое большое ограничение - эффективная миграция данных.Удаление первичных ключей и перестановка таблицы приводит к удалению дискового пространства в журнале транзакций.Создание новой таблицы и выполнение INSERT new SELECT * OLD аналогично.
Я начал экспериментировать с bcp и пытался следовать рекомендациям, которые я нашел здесь (это было связано со статьей Oflow - http://www.sommarskog.se/bulkload.html), но до сих пор я застрял из-за проблемы с импортом. В первой строке всегда происходит сбой при попытке обработать столбец datetime . Ничто из того, что я обнаружил в любой статье Oflow, похоже не помогаетрешить проблему.
Я выполнил экспорт bcp с -N, чтобы получить весь основной режим, создал файл форматирования с -N. Новая таблица, в которую я пытался импортировать, отличалась только в первичных ключах и индексах,не макет столбца, это не сработало. Я попытался создать пустую таблицу с той же структурой, но это не сработало. Я попробовал все 3 метода импорта, описанных в статье выше, но ни один из них не преодолел проблему импорта с датой и временем.
Я надеюсь, что кто-нибудь может подсказать мне, как обойти проблему импорта из даты и времени.
Схема таблицы:
CREATE TABLE [Notes](
[NoteID] [int] IDENTITY(1,1) NOT NULL,
[ObjectTypeID] [tinyint] NOT NULL,
[ObjectID] [int] NOT NULL DEFAULT ((0)),
[CreationTime] [datetime] NOT NULL,
[NoteTypeID] [tinyint] NOT NULL,
[AuthorUserID] [int] NOT NULL,
[AuthorName] [nvarchar](200) NULL,
[AuthorEmail] [nvarchar](100) NULL,
[Message] [nvarchar](max) NOT NULL,
[ObjectSubTypeID] [tinyint] NOT NULL,
[IpAddr] [nvarchar](48) NULL,
[Source] [tinyint] NULL,
CONSTRAINT [PK_RC_Note] PRIMARY KEY CLUSTERED
(
[ObjectTypeID] ASC,
[ObjectID] ASC,
[CreationTime] DESC,
[NoteID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Метод экспорта:
bcp NotesTest.Notes out .\Notes2.bcp -c -N -U foo -P bar -S dbserver
bcp NotesTest.Notes format nul -T -f Notes.fmt -N -U foo -P bar -S dbserver
Испытанные методы импорта:
bcp NotesTest.Notes in .\Notes2.bcp -U foo -P bar -S dbserver -h TABLOCK -b 50000 -f Notes.fmt
BULK INSERT Notes
FROM '\\myserver\myshare\notes2.bcp'
WITH (
BATCHSIZE = 50000
,CODEPAGE = 'RAW'
,DATAFILETYPE = 'native'
,FIRSTROW = 1
,FORMATFILE = '\\myserver\myshare\Notes.fmt'
,MAXERRORS = 20
,TABLOCK
);
SET IDENTITY_INSERT RC.RC_Note ON
INSERT INTO RC.RC_Note (NoteID, ObjectTypeID, ObjectID, CreationTime, NOteTypeID,AuthorUserID,AUthorName, AuthorEmail,Message,ObjectSubTypeID,IpAddr,Source)
SELECT NoteID, ObjectTypeID, ObjectID, CreationTime, NOteTypeID,AuthorUserID,AUthorName, AuthorEmail,Message,ObjectSubTypeID,IpAddr,Source
FROM OPENROWSET(BULK '\\myserver\myshare\notes2.bcp',
FORMATFILE='\\myserver\myshare\Notes.fmt'
) AS t1;
Сообщение об ошибке, полученное при всех операциях импорта (с небольшой разницей в зависимости от метода):
Bulk load data conversion error (truncation) for row 1, column 4 (CreationTime).
Спасибо