SQL Server 2016 Community Technology Preview 2.4 is available でアナウンスされていますが、本日 SQL Server 2016 CTP 2.4 がリリースされました。
サーバーコンポーネントが x64 のみ提供になったりと、導入に影響が出そうな変更がアナウンスされていますね。
# SQL Server Express Edition はどうなるんでしょうか? えろす師匠。
以前、作成したデモスクリプトを CTP 2.4 で動かしていて、気づいた点を少し列挙してみたいと思います。
Contents
■Polybase 設定のためのステートメント変更
これについては CTP 2.4 ではなく、CTP 2.2 以降で変更されていたようですが。
Polybase では、データベースレベルの資格情報を使用しますが、資格情報の作成が、CREATE DATABASE SCOPED CREDENTIAL を使用して実施します。
現状、データベースレベルの資格情報を作成するためには「4631」のトレースフラグを設定する必要があります。
CTP 2.1 の頃は、
CREATE CREDENTIAL AzureBlob -- 任意の設定 ON DATABASE WITH IDENTITY = 'AzureBLOB', -- 任意の設定 SECRET='<ストレージアカウントのキー>'; GO
だったのですが、CTP 2.2 以降は、
CREATE DATABASE SCOPED CREDENTIAL AzureBlob -- 任意の設定 WITH IDENTITY = 'AzureBLOB', -- 任意の設定 SECRET='<ストレージアカウントのキー>'; GO
というような構文に変更されたようです。
■Stretch Database 設定のためのステートメント変更
こちらは CTP 2.4 で変更されていたかと。
Stretch Database でも資格情報を使用しますが、この資格情報がサーバーレベルではなく、データベースレベルのスコープに変更となったようです。
CTP 2.3 までは、
CREATE CREDENTIAL [<サーバー名>.database.windows.net] WITH IDENTITY='ログイン', SECRET='パスワード'
で作成していたのですが、CTP 2.4 では、以下のようにデータベーススコープで作成する必要があります。
CREATE DATABASE SCOPED CREDENTIAL [<サーバー名>.database.windows.net] WITH IDENTITY='ログイン', SECRET='パスワード'
また、有効にするためのステートメントも変更となっています。
CTP 2.3 までは、
ALTER DATABASE DemoDB SET REMOTE_DATA_ARCHIVE = ON(SERVER= N'<サーバー名>.database.windows.net') GO ALTER TABLE StretchTable ENABLE REMOTE_DATA_ARCHIVE WITH (MIGRATION_STATE = ON) GO
で有効にしていましたが、CTP 2.4 では、
ALTER DATABASE DemoDB SET REMOTE_DATA_ARCHIVE = ON(SERVER= N'<サーバー名>.database.windows.net', CREDENTIAL = [<サーバー名>.database.windows.net]) GO ALTER TABLE StretchTable SET(REMOTE_DATA_ARCHIVE = ON (MIGRATION_STATE = ON)) GO
で有効にするように変更となっています。
DB レベルで有効にする際の変更については、「EDERATED_SERVICE_ACCOUNT = ON」も指定できるようになっているようですので、Azure AD を使用した SQL Database の認証実装と合わせて変更されているようですね。
■ネイティブコンパイルストアドプロシージャ内でユーザー定義関数のコール
CTP 2.1 では、ネイティブコンパイルストアドプロシージャから
CREATE FUNCTION dbo.FN_Add ( @p1 int ) RETURNS int AS BEGIN RETURN @p1 + 1 END GO
のようなクエリで作成されたユーザー定義関数をコールすることができていました。
CTP 2.4 では、以下のように、 ネイティブコンパイルを設定する必要があるようです。
# CTP 2.1 でも以下のような構文は有効ですが、関数に EXECUTE AS OWNER を指定する必要があるようです。
CREATE FUNCTION dbo.FN_Add ( @p1 int ) RETURNS int WITH NATIVE_COMPILATION, SCHEMABINDING AS BEGIN ATOMIC WITH (TRANSACTION ISOLATION LEVEL = SNAPSHOT, LANGUAGE = N'Japanese') RETURN @p1 + 1 END GO
自分で検証していたデモスクリプトについてはこれら以外は CTP 2.3 のものを使用することができました。