Nachlese zur SQL Azure Development Session beim SQL Server Launch 2012

Die gezeigten Folien zur Session gibt es hier:

PDF File

 

Um die beiden Beispiele nachzuspielen, stelle ich hier die Skripts Online.

Beispiel zu Migration

Die Migration von SQL on Premise zu SQL Azure kann mittels Bulk Copy realisiert werden. Hier zeige ich das Skript zum Übertragen aller Tabellen einer Datenbank nochmals:

$sqlroot = "C:\Program Files\Microsoft SQL Server\110\"
$bcp = "$sqlroot\Tools\binn\bcp.exe"
$sqlcmd = "$sqlroot\Tools\binn\sqlcmd.exe"
 
$dbLocal = "Northwind"
$dbAzure = $dbLocal
 
$ServerAzure ="ng7fvgv5qy"
$UserAzure = "username"
$PWDAzure ="passwort"
 
$ServerAzureFull = $ServerAzure + ".database.windows.net"
 
 
function TransferTable($tbl)
{
    Write-Host "Export Table: $tbl" -ForegroundColor Blue
    $arg = "[$tbl]", "out", "$tbl.dat", ,"-n",  "-T" , "-E", "-d$dbLocal"
    & $bcp $arg
   
   
   
    Write-Host "Import Table: $tbl" -ForegroundColor Blue
    $arg = "[$tbl]", "in", "$tbl.dat", "-U$UserAzure@$ServerAzure", "-P$PWDAzure", "-d$dbAzure", "-S$ServerAzureFull","-N", "-E"
    & $bcp $arg
    Write-Host "Import fertig" -ForegroundColor Green
}
 
function TransferAll()
{
    [void][reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
    $smsrv = New-Object Microsoft.SqlServer.Management.Smo.Server "."
    $smodb = $smsrv.databases[$dbLocal]
    $smodb.Tables | % {
        TransferTable $_.Name
    }
}
 
TransferAll

Im Skript werden mittels SQL Server Managementobjects alle Tabellen einer Datenbank identifiziert. (function TransferAll())

Pro Tabelle wird mittels  BCP Utility zunächst die Tabelle exportiert und dann in SQL Azure importiert.

Diese Methode setzt voraus, dass in SQL Azure die Datenbank Struktur bereits besteht.

Demo zu Federation

wer das Demo zur Federation nachspielen möchte, findet meine Beispiel Skripts hier. Einfach auf eine SQL Azure Datenbank verbinden und nachspielen. Die Demos gehen, davon aus, dass in der SQL Azure Datenbank ein Verbund (das ist die deutsche Übersetzung für Federation) mit dem Namen “mandanten_fed” und gleichlautendem Federatiokey angelegt ist.

Tabellen anlegen

use federation Mandanten_fed (Mandanten_fed =1) With Reset, Filtering = off
 
go
 
-- 1 -- Kunden
 
 
CREATE TABLE Kunden
(
       ID int not Null,
       MandantenID int not Null,
       Name nvarchar(50) Null,
       CountryID int Null,
 
 
    CONSTRAINT PK1 PRIMARY KEY (ID, MandantenID)
) FEDERATED ON (mandanten_fed = MandantenID)
 
GO
 
 
--2 -- Country
CREATE TABLE [dbo].[Country](
 [ID] [int] NOT NULL,
 [Country] [varchar](50) NOT NULL,
CONSTRAINT [PK_Country] PRIMARY KEY CLUSTERED 
(
 [ID] ASC
 )WITH (STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF)
 )
 
 -- 3 -- Reference
 ALTER TABLE [dbo].[Kunden]  WITH CHECK ADD  CONSTRAINT [FK_Kunden_Country] FOREIGN KEY([CountryID])
 REFERENCES [dbo].[Country] ([ID])  
 GO  
 ALTER TABLE [dbo].[Kunden] CHECK CONSTRAINT [FK_Kunden_Country] 
 GO
 
 
 

Demo Daten einspielen

use federation Mandanten_fed (Mandanten_fed =30) With Reset, Filtering = off
go

INSERT INTO Country VALUES (1, 'Germany')
INSERT INTO Country VALUES (2, 'Austria')   
INSERT INTO Country VALUES (3, 'Swiss')

--mandant 10
insert into Kunden values (1,10,'ppedv AG', 1)
insert into Kunden values (2,10,'ppedv GmbH', 2)

--Mandant 20
insert into Kunden values (3,20, 'Microsoft  D',1)
insert into Kunden values (4,20, 'Microsoft  A',2)


--Mandant 30
insert into Kunden values (5,30, 'Contoso D',1)
insert into Kunden values (6,30, 'Contoso  A',2)

Datenabfrage mit Filtering On und Off

-- Filtering = OFF
use federation Mandanten_fed (mandanten_fed = 10) with Reset, filtering = off
go
 
select * from Kunden k 
inner join country c on k.countryID = c.id
 
-- Filtering = ON
use federation Mandanten_fed (mandanten_fed = 20) with Reset, filtering = on
go
 
select * from Kunden k 
inner join country c on k.countryID = c.id

Split der Datenbank durchführen

USE FEDERATION ROOT WITH RESET   
GO   
 
ALTER FEDERATION Mandanten_Fed SPLIT AT (mandanten_Fed = 15)
GO

Kommentar schreiben