Re[2]: История одного перехода на SQLEXPRESS
От: akasoft Россия  
Дата: 09.05.06 09:15
Оценка:
Здравствуйте, DEMON HOOD, Вы писали:

DH>Экспрес я нашёл... а что такое SMS?


Microsoft SQL Server Management Studio.
... << RSDN@Home 1.2.0 alpha rev. 649>> SQL Express 2005
Re: История ЕЩЕ одного перехода на SQLEXPRESS
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 03.10.06 20:40
Оценка:
Здравствуйте, akasoft, Вы писали:

решил повторить все шаги, но уже на последнем Янусе — 1.2.0.655

повторил все как ниже по шагам — с установкой SQL Express gjnjv SP1 + SQL SMS (+SP1) из уже настоящего SQL Server 2005 Dev Edition

A>Сразу скажу, удалял и создавал я БД Януса раз 20 на разные лады, импортировал, экспортировал, всё понять хотел, как оно работает. И понял, что лучше будет создать пустую БД, а затем из SQL SMS выбрать БД Janus, правый щёлк, меню Tasks-Generate Scripts и в формочке мастера ставить True напротив Script Indexes, а затем у меня получился готовый скрипт создания пустой БД. Только путь в нём подправить на нужный. Вот такой он у меня получился:


[...]


получил скрипт, вставил шапочку из приведенного в ориг. сообщ. которая как я понял кастомизирует путь до базы и т.п. Все пока ОК.

A>Затем в очередной раз удалил БД Janus, и скриптом создал новую, но в нужном месте, SMS позволяет выполнять скрипты. Так у меня появилась БД с нужной схемой в нужном месте, но всё ещё без данных.


вставил путь до диры с Janus которая внутри C:\Program Files\RSDN\RSDN@Home\ — и получил несоздание БД ни скриптом ни из самой SQL SMS

выяснилось довольно быстро что нужно trustee NETWORK SERVICE дать полные права на директорию, где будет создаваться БД.

удалил БД совсем. после указанных манипуляций с security запустил скрипт снова и получил то что задумывалось.

A>Данные я перенёс стандартным импортом. Правый щёлк на Databases — Janus, меню Task — Import data... Переносил в три захода, вначале перенёс все мелкие таблицы, где были данные, затем messages, а потом topic_info. М.б. можно и всё за один раз, но я уже утомился к тому времени соблюдать целостность БД.


подтверждаю, сразу не пошло, если выделить все то ломается вот с таким симптомом:

Error 0xc0202009: Data Flow Task: An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "The statement has been terminated.".
An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "Violation of PRIMARY KEY constraint 'PK_server_forums'. Cannot insert duplicate key in object 'dbo.server_forums'.".
(SQL Server Import and Export Wizard)


и так практически с каждой табличкой. в чем тут дело? Как вылечить?

выставил доп.права для пользователя чтобы совсем как у SQL Server DATA диры — не помогло

в отчете ошибки начинаются с такой

[...]

— Copying to [Janus].[dbo].[rating] (Error)
Messages
* Error 0xc0202009: Data Flow Task: An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "The statement has been terminated.".
An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "The INSERT statement conflicted with the FOREIGN KEY constraint "FK_topic_info_mid". The conflict occurred in database "Janus", table "dbo.messages", column 'mid'.".
(SQL Server Import and Export Wizard)

[...]


пробовал отключать таблички по мере глюков с ними — начиная с server_forums, но та же ошибка повторялась и со всеми остальными

успешно переехали только те что были без данных

- Copying to [Janus].[dbo].[download_topics] (Success)
* 0 rows transferred
— Copying to [Janus].[dbo].[favorites] (Success)
* 0 rows transferred
— Copying to [Janus].[dbo].[favorites_folders] (Success)
* 0 rows transferred
— Copying to [Janus].[dbo].[marks_outbox] (Success)
* 0 rows transferred
— Copying to [Janus].[dbo].[rate_outbox] (Success)
* 0 rows transferred


попробовал отдельно messages переволочь — получил

Error 0xc002f210: Preparation SQL Task: Executing the query "TRUNCATE TABLE [Janus].[dbo].[messages]
" failed with the following error: "Cannot truncate table 'Janus.dbo.messages' because it is being referenced by a FOREIGN KEY constraint.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.


грустно. убрал галочку Delete rows in destination table которую выставил отчего то решив что она нужна дабы грохнуть на всякий случай все что вдруг осталось от предыдущих экспериментов с импортом. Пустил снова — о, чудо! — пошло импортировать messages

поставил следом messages_output и получил

Error 0xc0202009: Data Flow Task: An OLE DB error has occurred. Error code: 0x80004005.
An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "The statement has been terminated.".
An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "Violation of PRIMARY KEY constraint 'PK_messages_outbox'. Cannot insert duplicate key in object 'dbo.messages_outbox'.".


методом тыка, удалось следом перегнать topic_info и все. на все оставшиеся таблички ошибка приведенная выше

попробовал наудачу пускануть скрипт IT приведенный по ссылке выше — частично что-то в нем сработало что-то нет, потом импорт все равно не пошел и я иссяк

подозреваю что-то не очень сложное, много по этому коду ошибки в MSDN находится... вроде 'PRB: System Tables Missing Primary Key Information After Upgrade from SQL Server 6.x to SQL Server 7.0 or SQL Server 2000' с советами вроде "An alternative solution is to drop the primary key constraint, and then re-create it."...

но думаю спросить будет лучше и вот спрашиваю.
Специалисты по БД (и по БД Януса в частности), подскажите пожалуйста что надо полечить?

A>Самое главное там — это нажать кнопочку Edit м поставить галку Enable identity insert напротив каждой таблицы. Мастер переносил данные быстрее Access, но тоже более получаса.


там кстати можно с шифтом выделить всю группу, и разом выставить указанную галочку
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[2]: История ЕЩЕ одного перехода на SQLEXPRESS
От: akasoft Россия  
Дата: 04.10.06 12:46
Оценка:
Здравствуйте, Valery A. Boronin, Вы писали:

Полагаю, что дело в том, что БД будет таки пытаться соблюдать целостность и корректность индексов и проч. Поэтому сначала нужно перенести таблицы-"справочники", а уже потом браться за более сложные по структуре.

Ну и про

галку Enable identity insert напротив каждой таблицы


не забыть.

А после каждой неудачи таблицу-destination надо очищать от записей.

VAB>

VAB>An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "Violation of PRIMARY KEY constraint 'PK_messages_outbox'. Cannot insert duplicate key in object 'dbo.messages_outbox'.".


Очень похоже именно на ту самую галочку.

VAB>попробовал наудачу пускануть скрипт IT приведенный по ссылке выше — частично что-то в нем сработало что-то нет, потом импорт все равно не пошел и я иссяк


Лучше не пробовать, без индексов после него тормозит сильно.

VAB>там кстати можно с шифтом выделить всю группу, и разом выставить указанную галочку


Не додумался в своё время.
... << RSDN@Home 1.2.0 alpha rev. 655>> SQLE 2005
Re[3]: История ЕЩЕ одного перехода на SQLEXPRESS
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 04.10.06 17:14
Оценка:
Здравствуйте, akasoft, Вы писали:

A>Полагаю, что дело в том, что БД будет таки пытаться соблюдать целостность и корректность индексов и проч. Поэтому сначала нужно перенести таблицы-"справочники", а уже потом браться за более сложные по структуре.


можно поподробнее какие таблички — справочники а какие нет?
как мне понять соблюдаю я или нет целостность индексов

я пока просто говорю сделай мне импорт и все, а дальше для меня непознанные тропы

A>

галку Enable identity insert напротив каждой таблицы

A>не забыть.

так я же писал что не забывал я эту галку — не помогло

A>А после каждой неудачи таблицу-destination надо очищать от записей.


а это наоборот — сначала везде ставил галочку "Delete rows in destination table" и не мог перегнать в т.ч. messages. Потом ее убрал — и смог... нужно ли как-то руками чистить каждую переносимую табличку, в чем суть этого предложения — разве я этого не делал до, см мой отчет?

VAB>>

VAB>>An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80004005 Description: "Violation of PRIMARY KEY constraint 'PK_messages_outbox'. Cannot insert duplicate key in object 'dbo.messages_outbox'.".


A>Очень похоже именно на ту самую галочку.


VAB>>попробовал наудачу пускануть скрипт IT приведенный по ссылке выше — частично что-то в нем сработало что-то нет, потом импорт все равно не пошел и я иссяк


A>Лучше не пробовать, без индексов после него тормозит сильно.

хорошо, это не буду трогать

VAB>>там кстати можно с шифтом выделить всю группу, и разом выставить указанную галочку


A>Не додумался в своё время.


сухой остаток: спасибо за ответ, но что делать то конкретно? свою ситуацию я запротоколировал по ходу возни — не могли бы Вы посмотреть что и на каком шаге мне нужно изменить\попробовать чтобы избежать таких сообщений с ошибками?
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re[4]: История ЕЩЕ одного перехода на SQLEXPRESS
От: Valery A. Boronin Россия linkedin.com/in/boronin
Дата: 08.10.06 20:53
Оценка:
поборол: использовал оригинальный скрипт из сообщения автора ветки.

То, что генерит SQL EXPRESS 9 SP1 отчего-то не катит.
Там разница вот в чем оказалась при сравнении скриптов:

IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[messages_outbox]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[messages_outbox](
[dte] [datetime] NOT NULL,
[gid] [int] NULL,
[hold] [bit] NOT NULL DEFAULT ((0)),
[message] [ntext] NULL,
[mid] [int] IDENTITY(1,1) NOT NULL,
[reply] [int] NOT NULL,
[subject] [nvarchar](128) NULL,
[tagline] [nvarchar](128) NULL,
CONSTRAINT [PK_messages_outbox] PRIMARY KEY CLUSTERED
(
[mid] ASC
было: )WITH (PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
стало: [b])WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
END

и так на всех таблицах.

Так что могу лишь сказать — используйте вариант akasoft
Автор: akasoft
Дата: 05.02.06


Happy Access -> SQL migrating!
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re: История одного перехода на SQLEXPRESS
От: Morpheus_  
Дата: 28.02.07 13:14
Оценка:
Здравствуйте, akasoft, Вы писали:

A>
CREATE TABLE [dbo].[messages](
        [dte] [datetime] NOT NULL,
        [gid] [int] NOT NULL,
        [ismarked] [bit] NOT NULL DEFAULT ((0)),
        [isread] [tinyint] NOT NULL DEFAULT ((0)),
        [message] [ntext] NULL,
        [mid] [int] NOT NULL,
...
A>


почему isread tinyint, а не bit?
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[2]: История одного перехода на SQLEXPRESS
От: akasoft Россия  
Дата: 28.02.07 13:26
Оценка:
Здравствуйте, Morpheus_, Вы писали:

M_>почему isread tinyint, а не bit?


Чтобы можно было индексировать. Оптимизация при поиске/сортировке.
... << RSDN@Home 1.2.0 alpha rev. 675>> SQLE 2005
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.