SE の雑記

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

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

leave a comment

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

Share

Written by Masayuki.Ozawa

10月 1st, 2015 at 7:48 pm

Posted in SQL Server

Tagged with ,

Leave a Reply