SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server 2016 CTP 2.4 でデモスクリプトを実行していて気付いたこと

without comments

SQL Server 2016 Community Technology Preview 2.4 is available でアナウンスされていますが、本日 SQL Server 2016 CTP 2.4 がリリースされました。

サーバーコンポーネントが x64 のみ提供になったりと、導入に影響が出そうな変更がアナウンスされていますね。
# SQL Server Express Edition はどうなるんでしょうか? えろす師匠

以前、作成したデモスクリプトを CTP 2.4 で動かしていて、気づいた点を少し列挙してみたいと思います。

■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 のものを使用することができました。

Written by Masayuki.Ozawa

10月 1st, 2015 at 7:48 pm

Posted in SQL Server

Tagged with ,

Leave a Reply