1TBのディスクが接続された(Azure上の)SQL Server 2014があり、ディスク領域が不足しています。残りは約20GBです(おそらく数週間分の空き容量があります)。したがって、現在のディスクから新しいディスクにデータを移動する必要があります。
サーバー:
Microsoft SQL Server 2014 - 12.0.2548.0 (X64)
Jun 8 2015 11:08:03
Copyright (c) Microsoft Corporation
Web Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
MS-SQL 2014はclassicAzure VMにインストールされます。このVMはclassicVNETにあります。ストレージDISKSもclassicです。 MS-Supportは、最新のAzure Storageを利用してディスクのサイズ変更や新しいSSDディスクの使用などを可能にする場合は、これらすべてを更新する必要があるとMS-Supportは言いました。TL; DR; IPアドレスを介してVMと通信する他のすべてのサブシステムを含めて、これを数時間オフラインにすることはできません。これをフレームフェストにしないでください。これがで動作するように与えられており、後でこれをすべて修正する必要があります。
だから今、何を試してFILEGROUPSを活用し、1つ以上のテーブルをFILEGROUPに移動し、このFILEGROUPを、アタッチした別のDISKにプッシュするかというアイデア。
したがって、ここでの質問は次のとおりです。
データが小さければ問題ありませんが、ここにいくつかのテーブルを簡単に見てみましょう...
その最初のテーブルは巨大です(残りのデータに関して)。 750GB ish。
結果の画像で、4行目の2行目、3行目を移動することを考えていました。インフラストラクチャはすべてOLDクラシックのものにあると私が言った方法を覚えていますか?つまり、HDは古くて遅いため、データのコピーにも時間がかかる可能性があります。
例として、.mdf
(このDBには1つのメインmdfと2つの他の小さなmdfがある)を古いディスクから新しいディスクにコピーしようとしました。 24時間という短いETAがありました。
サイトを数時間オフラインにしてもまったく問題ありません。私たちは、お客様が眠っているときに、物をオフラインにすることができます。しかし... 24時間..痛いです。 24時間のアイデアは、以下の簡単なテストでした。
現在、私たちはアイデアを受け入れており、スタック交換は「意見」のサイトではないことを知っているので、これを提案された回答でターゲットに保ち、それについてフィードバックを得ようとしています...しかし、私たちはオープンですオフライン時間を短縮する他のソリューションに。
だから-誰か助けてくれますか?
これは、このDBの現在のファイルのスクリーンショットです。
機能しますが、テーブルを新しいファイルグループに移動する必要はありません。
データベースの既存のファイルグループにファイルを追加するだけで、SQL Serverは新しいファイルの使用を開始します。
SQL Serverは、ファイルグループに複数のファイルがある場合、「比例充填アルゴリズム」を使用します。したがって、新しいファイルを(おそらく別のボリューム上に)ファイルグループに追加すると、SQL Serverは、現在のファイルと同じ割合でいっぱいになるまで、そのファイルグループに新しいデータを書き込みます。
テーブルを新しいファイルグループに移動するという考えは機能するはずです。 moveの間、これらのテーブルをオフラインにしますが、クエリで再び使用できるようになります。戦略的に一度に1つずつ行うことで、ダウンタイムを制限することができます。
Enterprise Editionを使用している場合は、これの
ONLINE
インデックス操作バージョンを利用して、クエリでテーブルを使用できるようにすることができます。 Web Editionを使用しているため、これはオプションではありません。
ここでは、1 GBのテーブルを含むデータベースを作成します。
USE [master];
GO
CREATE DATABASE [257236];
GO
USE [257236];
GO
CREATE TABLE dbo.OneGigTable
(
Id int IDENTITY(1,1) NOT NULL,
[BigColumn] nvarchar(max) NOT NULL,
CONSTRAINT PK_OneGigTable PRIMARY KEY (Id)
);
GO
INSERT INTO dbo.OneGigTable
SELECT TOP (16777216)
N'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
FROM master.dbo.spt_values v1
CROSS JOIN master.dbo.spt_values v2
CROSS JOIN master.dbo.spt_values v3;
GO
そして、このデータファイル(デフォルトでは、プライマリファイルグループ)がほぼいっぱいであることがわかります。
次に、新しいファイルグループを追加し、そのグループにファイルを追加します。 FILENAME
を新しいディスクのパスに設定する必要があることに注意してください。また、移動する予定のデータ量に基づいて適切なサイズに設定する必要があります。
ALTER DATABASE [257236]
ADD FILEGROUP NewFileGroup;
GO
ALTER DATABASE [257236]
ADD FILE
(
NAME = NewFile_1,
FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQL2014\MSSQL\DATA\NewFile_1.ndf',
SIZE = 1024MB
)
TO FILEGROUP NewFileGroup;
GO
SSMSで「ディスク使用量」レポートを実行すると、新しいファイルがほとんど空であることがわかります。
次に、テーブルを新しいファイルグループに再構築します。
CREATE UNIQUE CLUSTERED INDEX PK_OneGigTable
ON dbo.OneGigTable (Id)
WITH (DROP_EXISTING = ON)
ON NewFileGroup;
これで、プライマリファイルグループがほとんど空になり、すべてのデータが新しいファイルグループに移動したことがわかります。