Секционированные таблицы и индексы SQL Server 2005 - Управление второй каскадной таблицей ("выключаемой")
ОГЛАВЛЕНИЕ
Управление второй каскадной таблицей ("выключаемой")
- Создайте вторую каскадную таблицу - это пустая таблица, которая будет хранить данные отключаемой секции.
CREATE TABLE SalesDB.[dbo].[OrdersOctober2002]
(
[OrderID] [int] NOT NULL,
[EmployeeID] [int] NULL,
[VendorID] [int] NULL,
[TaxAmt] [money] NULL,
[Freight] [money] NULL,
[SubTotal] [money] NULL,
[Status] [tinyint] NOT NULL,
[RevisionNumber] [tinyint] NULL,
[ModifiedDate] [datetime] NULL,
[ShipMethodID] [tinyint] NULL,
[ShipDate] [datetime] NOT NULL,
[OrderDate] [datetime] NOT NULL,
[TotalDue] [money] NULL
) ON [FG1]
GO - Проиндексируйте каскадную таблицу - она должна иметь такой же кластерный индекс, как и таблица, в которую планируется добавить секцию (секция станет этой таблицей).
ALTER TABLE [OrdersOctober2002]
ADD CONSTRAINT OrdersOctober2002PK
PRIMARY KEY CLUSTERED (OrderDate, OrderID)
ON [FG1]
GO
Исключите старые данные из секционированной таблицы и добавьте новые.
- Отделите старые данные от основной таблицы - переключите их во вторую каскадную таблицу.
ALTER TABLE Orders
SWITCH PARTITION 1
TO OrdersOctober2002
GO - Измените функцию секционирования для того, чтобы удалить граничную точку октября 2002.
ALTER PARTITION FUNCTION TwoYearDateRangePFN()
MERGE RANGE ('20021031 23:59:59.997')
GO - Следующий оператор удаляет ассоциацию между файловой группой и схемой секционирования. Другими словами, FG1 больше не является частью схемы секционирования. А поскольку вы будете размещать новые данные всё в тех же 24 секциях, то вам придется сделать FG1 "next used" секцией. Иначе говоря, это будет следующая используемая секция.
ALTER PARTITION SCHEME TwoYearDateRangePScheme
NEXT USED [FG1]
GO - Измените функцию секционирования для того, чтобы добавить новую граничную точку октября 2004.
ALTER PARTITION FUNCTION TwoYearDateRangePFN()
SPLIT RANGE ('20041031 23:59:59.997')
GO - Измените ограничение целостности базовой таблицы (если такое существует) для того, чтобы расширить диапазон данных. Поскольку добавление ограничения целостности может стать дорогостоящей операцией (из-за проверки данных), то в данном случае наилучшее решение - это растянуть диапазон дат вместо удаления и пересоздания ограничения целостности. Пока у нас есть только одно ограничение целостности (OrdersRangeYearCK), но на будущее мы создадим два.
ALTER TABLE Orders
ADD CONSTRAINT OrdersRangeMaxOctober2004
CHECK ([OrderDate] < '20041101')
GO
ALTER TABLE Orders
ADD CONSTRAINT OrdersRangeMinNovember2002
CHECK ([OrderDate] >= '20021101')
GO
ALTER TABLE Orders
DROP CONSTRAINT OrdersRangeYearCK
GO - "Включите" новые данные из первой каскадной таблицы.
ALTER TABLE OrdersOctober2004
SWITCH TO Orders PARTITION 24
GO