2016-11-30 6 views
4

私たちの実稼働環境用にSQL Server 2012に新しいデータベースを作成中です。私はSQL Server Management Studioの中から「新規データベース...」オプションを使用して出力を生成するとき、私は得る:なぜ、これほど多くのANSIオプションがOFFに不履行れ新しいデータベースを作成するときの最適なANSIオプション

CREATE DATABASE [AAA] 
CONTAINMENT = NONE 
ON PRIMARY 
(NAME = N'AAA', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014\MSSQL\DATA\AAA.mdf' , SIZE = 5120KB , FILEGROWTH = 1024KB) 
LOG ON 
(NAME = N'AAA_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQL2014\MSSQL\DATA\AAA_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%) 
GO 
ALTER DATABASE [AAA] SET COMPATIBILITY_LEVEL = 120 
GO 
ALTER DATABASE [AAA] SET ANSI_NULL_DEFAULT OFF 
GO 
ALTER DATABASE [AAA] SET ANSI_NULLS OFF 
GO 
ALTER DATABASE [AAA] SET ANSI_PADDING OFF 
GO 
ALTER DATABASE [AAA] SET ANSI_WARNINGS OFF 
GO 
ALTER DATABASE [AAA] SET ARITHABORT OFF 
GO 
ALTER DATABASE [AAA] SET AUTO_CLOSE OFF 
GO 
ALTER DATABASE [AAA] SET AUTO_SHRINK OFF 
GO 
ALTER DATABASE [AAA] SET AUTO_CREATE_STATISTICS ON(INCREMENTAL = OFF) 
GO 
ALTER DATABASE [AAA] SET AUTO_UPDATE_STATISTICS ON 
GO 
ALTER DATABASE [AAA] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO 
ALTER DATABASE [AAA] SET CURSOR_DEFAULT GLOBAL 
GO 
ALTER DATABASE [AAA] SET CONCAT_NULL_YIELDS_NULL OFF 
GO 
ALTER DATABASE [AAA] SET NUMERIC_ROUNDABORT OFF 
GO 
ALTER DATABASE [AAA] SET QUOTED_IDENTIFIER OFF 
GO 
ALTER DATABASE [AAA] SET RECURSIVE_TRIGGERS OFF 
GO 
ALTER DATABASE [AAA] SET DISABLE_BROKER 
GO 
ALTER DATABASE [AAA] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO 
ALTER DATABASE [AAA] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO 
ALTER DATABASE [AAA] SET PARAMETERIZATION SIMPLE 
GO 
ALTER DATABASE [AAA] SET READ_COMMITTED_SNAPSHOT OFF 
GO 
ALTER DATABASE [AAA] SET READ_WRITE 
GO 
ALTER DATABASE [AAA] SET RECOVERY SIMPLE 
GO 
ALTER DATABASE [AAA] SET MULTI_USER 
GO 
ALTER DATABASE [AAA] SET PAGE_VERIFY CHECKSUM 
GO 
ALTER DATABASE [AAA] SET TARGET_RECOVERY_TIME = 0 SECONDS 
GO 
ALTER DATABASE [AAA] SET DELAYED_DURABILITY = DISABLED 
GO 
USE [AAA] 
GO 
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [AAA] MODIFY FILEGROUP [PRIMARY] DEFAULT 
GO 

? サーバーインスタンスは、私たちのためにRackSpaceによって設定されました。インスタンスに設定されているデフォルトのためかもしれませんか?

おかげで、すべての可能性では、このデータベースが作成された、デフォルトのいずれかに触れることなく、スクリプト、ためのオプションがOFFをデフォルトされている クリス

+2

良い質問。これらの設定のそれぞれは、それ自体かなり主題です。誰もあなたにスタックオーバーフローの長さ制限について素晴らしい答えを与えることはできないと思います。あなたが心配しているものがあれば、私はそれらを別々に(Googleの後に)尋ねるだろう。私が見ていることの1つは、ログファイルが一定の割合で増加するように設定されていることです。これを固定量に変更することができれば、おそらく最適です。 –

+1

%で自動成長する方法については、@RichBennerに感謝します。最も気になる設定は 'ANSI_NULLS'です。標準は 'NULL = NULL'は' TRUE'ではなく 'UNKNOWN' /' NULL'を返します(オプションがオフのとき)。デフォルトは後者(OFF)であるように見えます。サイトはOFFに設定されたままにしておきます:https://www.simple-talk.com/sql/database-administration/database-properties-health-check/ –

+0

シンプルトークでのアドバイスは健全です。一般的に、デフォルトではNULLを許可する列を作成する必要はありません。 –

答えて

1

。データベースが作成されると、基本的にはmodelシステムデータベースから複製され、新しいSQL Serverのインストールでは、データベースのANSI設定はOFFになります(ANSI_NULLSなど)最新のデータベースアプリケーションであれば、OFFになりたくはありません。実際には、ANSI_NULLSの場合、文書ではそれをまったく無効にする機能はdeprecatedであると指定されていますが、実際にはまだ数年前のことです。

これらの設定は、古いアプリケーションの利益のためにまだOFFに保たれています。これらのオプションを有効にしなければならないときには、いつでもその変更が有効になります。セッションで値が指定されていない場合は、データベース設定が適用されます。

ほとんどのアプリケーションdoは、明示的でない場合はセッション内でこれらの設定を指定し、その後データアクセスライブラリを介して暗黙的に指定します。一度設定の束を切り替えSET ANSI_DEFAULTS上の文書、パー:接続時に

SQL ServerネイティブクライアントのODBCドライバーとSQL Server用のSQL Serverネイティブクライアント OLE DB Providerは、自動的にONANSI_DEFAULTSを設定します。ドライバとプロバイダは、次に CURSOR_CLOSE_ON_COMMITIMPLICIT_TRANSACTIONSからOFFを設定します。 SET CURSOR_CLOSE_ON_COMMITSET IMPLICIT_TRANSACTIONS ためOFF設定は、ODBC接続属性、 またはSQL Serverに接続する前に、アプリケーション に設定されているOLE DB接続プロパティで、ODBCデータソースで構成することができます。 SET ANSI_DEFAULTSのデフォルトは、DB-Libraryアプリケーションからの接続の場合は OFFです。

DB-Libraryが、それにもかかわらず、まだいくつかの古代の用途で使用され、必要に応じてFreeTDSのようなもののバッキング源として、そうしょっちゅうあなたはまだ故意または誤って使用するアプリケーションに実行することができ、古いアクセスライブラリでありますデータベースの設定ですが、これはますます稀です。

については、の値は、これらのオプションの価値があります。これは、使用方法によってまったく異なります。古い動作が予想される古いアプリケーションをサポートする必要がある場合は、データベース設定をOFFのままにする必要はありません。古いライブラリを介して接続していても、現代のSQLセマンティクスを実際に期待するアプリケーションをお持ちの場合は、ONに設定してください。他のすべてのアプリケーションでは、これらのオプションは、セッションごとにアプリケーション自体によって正しい値に設定されている可能性が高く、設定する内容は問題になりません。

個々のオプションについての説明と、それをONまたはOFFにしたいときは、妥当な答えの制限を超えます。それぞれのドキュメントを参照して、独自のベストプラクティスを策定してください。 SET option requirements for indexes on computed columnsのようなものを手配できるようにすることができます。多くのオプションが必要な場合は、作成する前にONにする必要があります(一般的には素晴らしいものです)。

+0

素晴らしい答え。ありがとう –

関連する問題