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