ЗакончилосьАвтор: akasoft
Дата: 04.02.06
у меня недавно
счастье.
И вроде рядом оно, а совсем вышло всё.
А рубить "нажитое непосильным трудом" жалко. Хотел было удалить "старые" темы да ненужные форумы, но передумал.
Долго ли, коротко ли, а без Януса совсем "жизни" нет
, и решился я помучать SQL Express. А поскольку ленивый я очень, то утилиту импорта-экспорта писать мне было влом, и решил я воспользоваться встроенными да имеющимися возможностями.
Само собой, что поставил я тулзы от сервера 2005, и пробовал всё из Microsoft SQL Server Management Studio.
Попробовал экспорт данных из Access в SQL Server, создал источник более часа ждал, образовалась папка с 2Г БД и 4Г лога. Удалил нафиг.
Попробовал импорт данных, как
ИТ излагалАвтор: akasoft
Дата: 30.10.05
. Получилось, только что из-за перестроения индексов БД распухла на 42%, что-то до 4Г. Без перестроения индексов жутько тормозила, хуже mdb, что и не удивительно. Но и после построения индексов, и после сжатия всё одно работа была несколько некомфортной. Я, знаете, от SQL Express ожидал большего.
Тогда мне стало совсем грустно, и пришлось напрячь остатки мозгов.
И подумал я, что Янус-то должен уметь создавать структуру-пустышку,
Ретн не зря старался же. Сказано сделано. Запустил Янус, само собой открыл мне он mdb, я полез в меню Сервис-Настройки пользователя, и изменил там строку подключения: нажал троеточие, перешёл на вкладку MS SQL Server, указал там COMPUTERNAME\SQLEXPRESS, Windows-аутентификацию, нажал Connect, установил соединение, а затем нажал Create. БД появилась, строка подключения сформировалась, и при последующем перезапуске Януса я наконец увидел... ничего не увидел.
Ну, начнём с того, что БД создалась в папке по умолчанию, что меня категорически не устраивало, у меня были свои виды на положение БД. А во-вторых, надо бы перенести данные таки.
Во время экспериментов заметил я любовь Экспресса к оперативной памяти, и решил это пресечь. Выбрал правым щелчком по корневой ветке в SQL SMS сервер, меню Properties, страница Memory и выставил там мксимум и минимум в МБ. После чего перезапустил службу, ну и SMS переподключил. Аппетиты поубавились, хотя этот товарищ всё порывался перейти установленный мною максимум, хотя и ненамного, мегабайт на 20-30.
Сразу скажу, удалял и создавал я БД Януса раз 20 на разные лады, импортировал, экспортировал, всё понять хотел, как оно работает. И понял, что лучше будет создать пустую БД, а затем из SQL SMS выбрать БД Janus, правый щёлк, меню Tasks-Generate Scripts и в формочке мастера ставить True напротив Script Indexes, а затем у меня получился готовый скрипт создания пустой БД. Только путь в нём подправить на нужный. Вот такой он у меня получился:
USE [master]
GO
IF NOT EXISTS (SELECT name FROM sys.databases WHERE name = N'Janus')
BEGIN
CREATE DATABASE [Janus] ON PRIMARY
( NAME = N'Janus', FILENAME = N'C:\rsdnforums\sql\Janus.mdf' , SIZE = 2240KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON
( NAME = N'Janus_log', FILENAME = N'C:\rsdnforums\sql\Janus_log.LDF' , SIZE = 1088KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)
END
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'Janus', @new_cmptlevel=90
GO
ALTER DATABASE [Janus] SET ANSI_NULL_DEFAULT OFF
GO
ALTER DATABASE [Janus] SET ANSI_NULLS OFF
GO
ALTER DATABASE [Janus] SET ANSI_PADDING OFF
GO
ALTER DATABASE [Janus] SET ANSI_WARNINGS OFF
GO
ALTER DATABASE [Janus] SET ARITHABORT OFF
GO
ALTER DATABASE [Janus] SET AUTO_CLOSE ON
GO
ALTER DATABASE [Janus] SET AUTO_CREATE_STATISTICS ON
GO
ALTER DATABASE [Janus] SET AUTO_SHRINK OFF
GO
ALTER DATABASE [Janus] SET AUTO_UPDATE_STATISTICS ON
GO
ALTER DATABASE [Janus] SET CURSOR_CLOSE_ON_COMMIT OFF
GO
ALTER DATABASE [Janus] SET CURSOR_DEFAULT GLOBAL
GO
ALTER DATABASE [Janus] SET CONCAT_NULL_YIELDS_NULL OFF
GO
ALTER DATABASE [Janus] SET NUMERIC_ROUNDABORT OFF
GO
ALTER DATABASE [Janus] SET QUOTED_IDENTIFIER OFF
GO
ALTER DATABASE [Janus] SET RECURSIVE_TRIGGERS OFF
GO
ALTER DATABASE [Janus] SET ENABLE_BROKER
GO
ALTER DATABASE [Janus] SET AUTO_UPDATE_STATISTICS_ASYNC OFF
GO
ALTER DATABASE [Janus] SET DATE_CORRELATION_OPTIMIZATION OFF
GO
ALTER DATABASE [Janus] SET TRUSTWORTHY OFF
GO
ALTER DATABASE [Janus] SET ALLOW_SNAPSHOT_ISOLATION OFF
GO
ALTER DATABASE [Janus] SET PARAMETERIZATION SIMPLE
GO
ALTER DATABASE [Janus] SET READ_WRITE
GO
ALTER DATABASE [Janus] SET RECOVERY SIMPLE
GO
ALTER DATABASE [Janus] SET MULTI_USER
GO
ALTER DATABASE [Janus] SET PAGE_VERIFY CHECKSUM
GO
ALTER DATABASE [Janus] SET DB_CHAINING OFF
USE [Janus]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
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 (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[rate_outbox]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[rate_outbox](
[id] [int] IDENTITY(1,1) NOT NULL,
[mid] [int] NOT NULL,
[rate] [int] NOT NULL,
CONSTRAINT [PK_rate_outbox] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[rating]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[rating](
[dte] [datetime] NOT NULL,
[id] [int] IDENTITY(1,1) NOT NULL,
[mid] [int] NOT NULL,
[rate] [smallint] NOT NULL,
[rby] [smallint] NOT NULL,
[tid] [int] NOT NULL,
[uid] [int] NOT NULL,
CONSTRAINT [PK_rating] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[rating]') AND name = N'IX_rating_mid')
CREATE NONCLUSTERED INDEX [IX_rating_mid] ON [dbo].[rating]
(
[mid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[rating]') AND name = N'IX_rating_mid_rate')
CREATE NONCLUSTERED INDEX [IX_rating_mid_rate] ON [dbo].[rating]
(
[mid] ASC,
[rate] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[rating]') AND name = N'IX_rating_tid')
CREATE NONCLUSTERED INDEX [IX_rating_tid] ON [dbo].[rating]
(
[tid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[rating]') AND name = N'IX_rating_uid')
CREATE NONCLUSTERED INDEX [IX_rating_uid] ON [dbo].[rating]
(
[uid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[server_forums]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[server_forums](
[descript] [nvarchar](128) NULL,
[id] [int] NOT NULL,
[name] [nvarchar](64) NULL,
[rated] [bit] NOT NULL DEFAULT ((0)),
[intop] [bit] NOT NULL DEFAULT ((0)),
[ratelimit] [smallint] NOT NULL,
CONSTRAINT [PK_server_forums] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[server_forums]') AND name = N'IX_server_forums_name')
CREATE NONCLUSTERED INDEX [IX_server_forums_name] ON [dbo].[server_forums]
(
[name] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[subscribed_forums]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[subscribed_forums](
[descript] [nvarchar](128) NULL,
[id] [int] NOT NULL,
[lastsync] [int] NOT NULL,
[name] [nvarchar](64) NULL,
[urcount] [int] NULL,
[issync] [bit] NOT NULL DEFAULT ((0)),
[priority] [int] NULL,
CONSTRAINT [PK_subscribed_forums] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[subscribed_forums]') AND name = N'IX_subscribed_forums_name')
CREATE NONCLUSTERED INDEX [IX_subscribed_forums_name] ON [dbo].[subscribed_forums]
(
[name] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[users]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[users](
[homepage] [nvarchar](120) NULL,
[origin] [nvarchar](255) NULL,
[publicemail] [nvarchar](60) NULL,
[realname] [nvarchar](80) NULL,
[spec] [nvarchar](100) NULL,
[uid] [int] NOT NULL,
[userclass] [int] NULL,
[username] [nvarchar](60) NULL,
[usernick] [nvarchar](100) NULL,
[wherefrom] [nvarchar](100) NULL,
CONSTRAINT [PK_users] PRIMARY KEY CLUSTERED
(
[uid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[vars]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[vars](
[name] [nvarchar](24) NOT NULL,
[varvalue] [nvarchar](128) NULL,
CONSTRAINT [PK_vars] PRIMARY KEY CLUSTERED
(
[name] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[download_topics]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[download_topics](
[id] [int] IDENTITY(1,1) NOT NULL,
[source] [nvarchar](32) NULL,
[messageid] [int] NOT NULL,
[hint] [nvarchar](128) NULL,
CONSTRAINT [PK_download_topics] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[favorites]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[favorites](
[id] [int] IDENTITY(1,1) NOT NULL,
[mid] [int] NOT NULL,
[fid] [int] NOT NULL,
[comment] [nvarchar](255) NULL,
[url] [ntext] NULL,
CONSTRAINT [PK_favorites] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[favorites_folders]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[favorites_folders](
[id] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](100) NULL,
[pid] [int] NOT NULL,
[comment] [nvarchar](255) NULL,
CONSTRAINT [PK_favorites_folders] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[marks_outbox]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[marks_outbox](
[id] [int] IDENTITY(1,1) NOT NULL,
[mark] [int] NOT NULL,
[mid] [int] NOT NULL,
CONSTRAINT [PK_marks_outbox] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[messages]') AND type in (N'U'))
BEGIN
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,
[pid] [int] NOT NULL,
[subject] [nvarchar](128) NULL,
[tid] [int] NOT NULL,
[uclass] [int] NULL,
[uid] [int] NOT NULL,
[usernick] [nvarchar](50) NULL,
[article_id] [int] NULL,
[readreplies] [bit] NOT NULL DEFAULT ((0)),
[name] [nvarchar](160) NULL,
CONSTRAINT [PK_messages] PRIMARY KEY CLUSTERED
(
[mid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[messages]') AND name = N'IX_messages_dte')
CREATE NONCLUSTERED INDEX [IX_messages_dte] ON [dbo].[messages]
(
[dte] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[messages]') AND name = N'IX_messages_gid')
CREATE NONCLUSTERED INDEX [IX_messages_gid] ON [dbo].[messages]
(
[gid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[messages]') AND name = N'IX_messages_pid')
CREATE NONCLUSTERED INDEX [IX_messages_pid] ON [dbo].[messages]
(
[pid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[messages]') AND name = N'IX_messages_tid')
CREATE NONCLUSTERED INDEX [IX_messages_tid] ON [dbo].[messages]
(
[tid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[messages]') AND name = N'IX_messages_uid')
CREATE NONCLUSTERED INDEX [IX_messages_uid] ON [dbo].[messages]
(
[uid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[topic_info]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[topic_info](
[mid] [int] NOT NULL,
[answers_count] [smallint] NULL,
[answers_unread] [smallint] NULL,
[answers_rate] [smallint] NULL,
[answers_smile] [smallint] NULL,
[answers_agree] [smallint] NULL,
[answers_disagree] [smallint] NULL,
[answers_me_unread] [smallint] NULL,
[answers_marked] [smallint] NULL,
[answers_last_update_date] [datetime] NULL,
[this_rate] [smallint] NULL,
[this_smile] [smallint] NULL,
[this_agree] [smallint] NULL,
[this_disagree] [smallint] NULL,
[gid] [int] NULL,
CONSTRAINT [PK_topic_info] PRIMARY KEY CLUSTERED
(
[mid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[topic_info]') AND name = N'IX_topic_info_answers_last_update_date')
CREATE NONCLUSTERED INDEX [IX_topic_info_answers_last_update_date] ON [dbo].[topic_info]
(
[answers_last_update_date] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
IF NOT EXISTS (SELECT * FROM sys.indexes WHERE object_id = OBJECT_ID(N'[dbo].[topic_info]') AND name = N'IX_topic_info_gid')
CREATE NONCLUSTERED INDEX [IX_topic_info_gid] ON [dbo].[topic_info]
(
[gid] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
GO
USE [Janus]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_topic_info_mid]') AND parent_object_id = OBJECT_ID(N'[dbo].[topic_info]'))
ALTER TABLE [dbo].[topic_info] WITH CHECK ADD CONSTRAINT [FK_topic_info_mid] FOREIGN KEY([mid])
REFERENCES [dbo].[messages] ([mid])
ON UPDATE CASCADE
ON DELETE CASCADE
Затем в очередной раз удалил БД Janus, и скриптом создал новую, но в нужном месте, SMS позволяет выполнять скрипты. Так у меня появилась БД с нужной схемой в нужном месте, но всё ещё без данных.
Данные я перенёс стандартным импортом. Правый щёлк на Databases — Janus, меню Task — Import data... Переносил в три захода, вначале перенёс все мелкие таблицы, где были данные, затем messages, а потом topic_info. М.б. можно и всё за один раз, но я уже утомился к тому времени соблюдать целостность БД.
Самое главное там — это нажать кнопочку Edit м поставить галку Enable identity insert напротив каждой таблицы. Мастер переносил данные быстрее Access, но тоже более получаса.
Затем я сжал БД, правый щёлк на БД Janus, меню Tasks — Shrink — Database. Хотя оно было почити не нужно, и БД, и лог были почти оптимальными, без лишка. В скрипте выше есть
ALTER DATABASE [Janus] SET AUTO_SHRINK OFF
но думаю, что делать ему ON неправильно, уж лучше по старинке, пальцами указать когда сжимать. Чтобы сразу потом и Back up из того же меню сделать.
Так я возобновил своё счастье, потеряв часов 5 на всякие эксперименты. По субъективным ощущениям бегает быстро, поиск правда тормозит так же.
Надо будет попробовать full text search включить, что ли.
Надеюсь, эта моя
сказка поможет кому сохранить время. Мне ещё предстоит всё это
колдовство на рабочем месте...
... << RSDN@Home 1.2.0 alpha rev. 642>>