This is a simple demo code for presentation of the SQL Server Stretch Database feature. This is a simple demo code for presentation of the SQL Server Stretch Database feature. The demo fully based on T-SQL queries and includes Instance Level configuration, Database Level configuration, Table Level configuration, creating Stretch filter function, Enable Stretch DB...

 

SQL
Edit|Remove
/***************************************************************  */ 
/***   SQL Server Stretch Database                                */ 
/***   By Ronen Ariely                                            */ 
/***   http://ariely.info/; https://www.facebook.com/ronen.ariely */ 
/***************************************************************  */ 
 
 
/***************************************************** Instance Level configuration */ 
--Check if the Stretch Database has been configure on the server already 
SELECT * FROM sys.configurations where name = 'remote data archive' 
GO 
 
--Enabling StretchDB feature on SQL Server instance 
EXEC sp_configure 'remote data archive'GO 
EXEC sp_configure 'remote data archive' ,'1'GO 
RECONFIGUREGO 
 
/***************************************************** Database Level configuration */ 
create database qq01 
GO 
 
use qq01 
GO 
 
--Create master to encrypt and secure credential and connection information 
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Password 2 Encrypt Master Key>' 
GO 
 
-- You need to change the user name and password to fit your Azure SQL server 
-- Create credential to connect to remote Azure SQL Database 'sqlqqserver.database.windows.net' 
CREATE DATABASE SCOPED CREDENTIAL [MyCredentialWITH  
       IDENTITY = '<sysadmin user name for the SQL Database server>', 
       SECRET = '<sysadmin password for the SQL Database server>' 
GO 
 
ALTER DATABASE [qq01]  
SET REMOTE_DATA_ARCHIVE = ON ( 
       SERVER = N'sqlqqserver.database.windows.net',  
       CREDENTIAL = [MyCredential] 
) 
GO -- this can take time! since a remote database is created at this time 
 
 
/***************************************************** Table Level configuration */ 
drop table if exists t1create table t1(id int identity(1,1), txt nvarchar(100) ) 
GO 
 
insert t1 (txtvalues ('a'go 10 
select * from t1 
GO 
 
 
/*------------------ SSMS Stretch Database wizard GUI – bug in design !!!! --*/ 
--   For more information you can read this blog: 
-- http://ariely.info/Blog/tabid/83/EntryId/192/SSMS-Stretch-Database-wizard-GUI-bug-in-design.aspx 
--  
-- Using the SSMS Stretch Database wizard does not fit for cases that the table does not include data which fit the stretch condition! 
-- If we use the query filter "[id] > 10" we get error 
--  
-- We can add more rows and show that now it will work well, since we have rows with Id 
insert t1 (txtvalues ('b'go 10 
 
/*------------------------------------------------------------------------ --*/ 
 
 
 
-- create Stretch filter function 
CREATE FUNCTION dbo.fn_stretch_by_id(@id intRETURNS TABLE WITH SCHEMABINDING AS    
       RETURN SELECT 1 AS is_eligible WHERE @id > 10   
GO 
 
-- We can create a new table with Stretch Database enabled, or we can enable on existing table 
--Enable remote data archival for a table 
ALTER TABLE dbo.t1 
    SET( 
        REMOTE_DATA_ARCHIVE = ON (   
            FILTER_PREDICATE = dbo.fn_stretch_by_id(id),  -- optional 
            MIGRATION_STATE = PAUSED 
        ) 
    ); 
GO 
 
-- pause and resume data migration 
-- https://docs.microsoft.com/en-us/sql/sql-server/stretch-database/pause-and-resume-data-migration-stretch-database 
ALTER TABLE dbo.t1 
    SET ( REMOTE_DATA_ARCHIVE (MIGRATION_STATE = OUTBOUND )) ;   
GO  
 
--ALTER TABLE dbo.t1 
--    SET (REMOTE_DATA_ARCHIVE (MIGRATION_STATE = PAUSED)); 
--GO 
 
 
/***************************************************** Monitoring */ 
-->> Use SQL Server Management Studio to check whether migration is active or paused 
-->> Open Stretch Database Monitor and check the value of the Migration State column 
 
-- checking using query: 
select * from  sys.remote_data_archive_tables 
GO 
 
 
/***************************************************** Using the remote table directly! */ 
------------------- Remote server ------------------- 
-- 1. get the table name from the above query 
-- 2. Connect to the remote server directly using ssms 
-- 3. execute queries on the remote table directly for batter performance on remote locations ;-) 
 
select * from [dbo_t1_981578535_264F6A66-58D5-4D54-AB05-D9BEA3D30396GO 
 
insert [dbo_t1_981578535_264F6A66-58D5-4D54-AB05-D9BEA3D30396] (id,txtvalues (11,'x'GO -- ERROR 
-- Cannot insert the value NULL into column 'batchID--981578535' 
-- the column 'batchID--933578364' include the local info 
 
insert [dbo_t1_981578535_264F6A66-58D5-4D54-AB05-D9BEA3D30396] (id,txt,[batchID--981578535]) values (11,'y',1select * from [dbo_t1_981578535_264F6A66-58D5-4D54-AB05-D9BEA3D30396GO 
 
update [dbo_t1_981578535_264F6A66-58D5-4D54-AB05-D9BEA3D30396set txt='y-new' where txt = 'y' 
select * from [dbo_t1_981578535_264F6A66-58D5-4D54-AB05-D9BEA3D30396GO 
 
delete [dbo_t1_981578535_264F6A66-58D5-4D54-AB05-D9BEA3D30396where txt = 'y-new' 
select * from [dbo_t1_981578535_264F6A66-58D5-4D54-AB05-D9BEA3D30396GO 
 
 
/***************************************************** */ 
------------------- back to local server ------------------- 
 
insert t1 (txtvalues ('c'go 
 
select * from t1 
GO 
 
select * from t1 
where id > 10 
GO 
 
 
/***************************************************** Backup & restore */ 
-- reconnect to Azure SQL Database (after restore datrabase) 
EXEC sys.sp_reauthorize_remote_data_archive  
    @azure_username='<sysadmin user name for the SQL Database server>'@azure_password = '<sysadmin password for the SQL Database server>'GO