none
データ、ログファイルへの分散保存、多重保存について RRS feed

  • 質問

  • すごく基本的なことですが、教えてください。

    データやログのファイルを分散して保存したり、多重化して保存するにはどうすればよいでしょうか?分散にはパーティションを使わないと無理なのでしょうか。

    create database 文と create table文の文法はみたのですがよくわかりませんでした。

    http://msdn.microsoft.com/ja-jp/library/ms174979.aspx

     

    以下の2つの例の場合だと両方、データもログも多重化されるのでしょうか??

    USE master;
    GO
    CREATE DATABASE Archive 
    ON
    PRIMARY 
      (NAME = Arch1,
      FILENAME = 'D:\SalesData\archdat1.mdf',
      SIZE = 100MB,
      MAXSIZE = 200,
      FILEGROWTH = 20),
      ( NAME = Arch2,
      FILENAME = 'D:\SalesData\archdat2.ndf',
      SIZE = 100MB,
      MAXSIZE = 200,
      FILEGROWTH = 20),
      ( NAME = Arch3,
      FILENAME = 'D:\SalesData\archdat3.ndf',
      SIZE = 100MB,
      MAXSIZE = 200,
      FILEGROWTH = 20)
    LOG ON 
      (NAME = Archlog1,
      FILENAME = 'D:\SalesData\archlog1.ldf',
      SIZE = 100MB,
      MAXSIZE = 200,
      FILEGROWTH = 20),
      (NAME = Archlog2,
      FILENAME = 'D:\SalesData\archlog2.ldf',
      SIZE = 100MB,
      MAXSIZE = 200,
      FILEGROWTH = 20) ;
    GO

    USE master;
    GO
    CREATE DATABASE Sales
    ON PRIMARY
    ( NAME = SPri1_dat,
      FILENAME = 'D:\SalesData\SPri1dat.mdf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 15% ),
    ( NAME = SPri2_dat,
      FILENAME = 'D:\SalesData\SPri2dt.ndf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 15% ),
    FILEGROUP SalesGroup1
    ( NAME = SGrp1Fi1_dat,
      FILENAME = 'D:\SalesData\SG1Fi1dt.ndf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 5 ),
    ( NAME = SGrp1Fi2_dat,
      FILENAME = 'D:\SalesData\SG1Fi2dt.ndf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 5 ),
    FILEGROUP SalesGroup2
    ( NAME = SGrp2Fi1_dat,
      FILENAME = 'D:\SalesData\SG2Fi1dt.ndf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 5 ),
    ( NAME = SGrp2Fi2_dat,
      FILENAME = 'D:\SalesData\SG2Fi2dt.ndf',
      SIZE = 10,
      MAXSIZE = 50,
      FILEGROWTH = 5 )
    LOG ON
    ( NAME = Sales_log,
      FILENAME = 'E:\SalesLog\salelog.ldf',
      SIZE = 5MB,
      MAXSIZE = 25MB,
      FILEGROWTH = 5MB ) ;
    GO

    2011年4月25日 2:58

回答

すべての返信

  • 多重化はされません。ファイルが複数あり、分散して格納されるのみです。
    ログ多重化が必要であればログ配布等が必要です。
    データの多重化であればレプリケーションでしょう。

    データの分散はパーティションを使わずとも、ファイルグループを分けるだけでも可能です。
    (テーブルはどのファイルグループに作るか指定が可能です)
    ただし、透過的に同じテーブル名で違うファイルグループに保存するときはパーティションを使います。

    http://msdn.microsoft.com/ja-jp/library/ms179316.aspx

    2011年4月25日 6:59
    モデレータ
  • ありがとうございます。^^

    create tableでファイルグループを指定してテーブルを作成して、

    ファイルグループが複数のファイルから構成されていれば複数のファイルに分散して保存され、

    レコードがどのファイルに保存されるかは未定であるということでよいでしょうか?

     

    >データの分散はパーティションを使わずとも、ファイルグループを分けるだけでも可能です。

    とのことですが、複数のファイルグループをまたぐテーブルを作成するのは可能なのでしょうか?

    2011年4月25日 8:01
  • 前半部分は仰るとおりです。どのレコードがどのデータファイルに入るのかはやってみないとわからないはずです。
    また複数のファイルグループをまたぐテーブルはパーティションテーブルで作ることができます。
    どういうルールでパーティション分割するのかは指定が必要です。

    http://msdn.microsoft.com/ja-jp/library/ms190787.aspx
    2011年4月25日 8:24
    モデレータ
  • ありがとうございます。^^

    ファイルの多重化はレプリケーションとかでないと無理なのでしょうか?

    Oracleなんかだとファイルの多重化は簡単にできるように思うのですが。

     

    2011年4月26日 0:12
  • OracleではREDOログの多重化はできますが、データファイルの多重化はできましたっけ?
    SQL Serverではデータファイルもログファイルも通常のCreate databaseでの多重化はできません。
    補強する機能を利用する必要があります。

    http://blogs.technet.com/b/sqlpm-j/archive/2009/08/27/3277427.aspx

    • 回答としてマーク nodame2010 2011年4月26日 8:34
    2011年4月26日 1:26
    モデレータ
  • ありがとうございます。Oracleぐぐってみてもデータファイルの多重化なさげですね。

    ありがとうございました。

    2011年4月26日 8:34