When using a lot of virtual machines or any other remotedesktop connection, it would be nice to get personal rdp file properly saved – ready to use on own work pc / cloud drive. After this I can get my most used remote desktop connection open quicly and without typing logins over and over again
I thought it is time to re-post this. I find a good solution from Petri.com with a help of Remko Weijnen password encryption utility.
Original posts :
And
https://www.remkoweijnen.nl/blog/2007/10/18/how-rdp-passwords-are-encrypted/
Simply check rdp file (saved by you) on your machine. It looks something like this (minimum as it generated by azure)
full address:s:52.169.105.36:3389
prompt for credentials:i:1
administrative session:i:1
download cryp/decrypt utility to get you password properly in:
cryptRDP5.zip (6.4 KB, 1 view)
To get it generated with a password you must do an old school cmd script like this
:: "hashtool" – location of the hash tool
:: "outputfile" – destination and name for the .rdp file
:: "comp" – computer name (can be FQDN or NetBIOS)
:: "domain" – name of authenticating domain
:: (if stand-alone enter computer name)
:: "usr" – Username
@echo Off
If "%1"=="" Goto EOF
set pwd=%1
Set hashtool="cryptRDP5.exe"
set outputfile="computer1.rdp"
set comp=youraddress.com:[port number]
set domain=domain
set usr=myUsername
for /f "tokens=*" %%a in (’%hashtool% %pwd%’) do set pwdhash=%%a
:CreateRDP
If EXIST %outputfile% del %outputfile%
Echo screen mode id:i:2>> %outputfile%
Echo desktopwidth:i:1024>> %outputfile%
Echo desktopheight:i:768>> %outputfile%
Echo session bpp:i:24>> %outputfile%
Echo winposstr:s:0,1,32,68,800,572>> %outputfile%
Echo full address:s:%comp%>> %outputfile%
Echo compression:i:1>> %outputfile%
Echo keyboardhook:i:2>> %outputfile%
Echo audiomode:i:2>> %outputfile%
Echo redirectdrives:i:0>> %outputfile%
Echo redirectprinters:i:0>> %outputfile%
Echo redirectcomports:i:0>> %outputfile%
Echo redirectsmartcards:i:1>> %outputfile%
Echo displayconnectionbar:i:1>> %outputfile%
Echo autoreconnection enabled:i:1>> %outputfile%
Echo authentication level:i:0>> %outputfile%
Echo username:s:%usr%>> %outputfile%
Echo domain:s:%domain%>> %outputfile%
Echo alternate shell:s:>> %outputfile%
Echo shell working directory:s:>> %outputfile%
Echo password 51:b:%pwdhash%>> %outputfile%
Echo disable wallpaper:i:1>> %outputfile%
Echo disable full window drag:i:0>> %outputfile%
Echo disable menu anims:i:0>> %outputfile%
Echo disable themes:i:0>> %outputfile%
Echo disable cursor setting:i:0>> %outputfile%
Echo bitmapcachepersistenable:i:1>> %outputfile%
Echo drivestoredirect:s:*>> %outputfile%
:EOF
Aluksi
Tässä kirjoituksessa tehdään Azure Logic App Serverless sovellus, joka käyttää FTP- ja Email palveluja Azure Function App ohjauksessa. Tarkoituksena on kuvata varsinaisen Logic App sovelluksen toiminta ja tekeminen Visual studio Desktopilla - no… suurimmaksi osaksi, alun teen Azure portaalissa yksinkertaisuuden vuoksi. Ja sen takia että saadaan koodit ja Azure resource kuvaukset versionhallintaan Git repositorioon. Tämä tapa on edellytyksenä automatisoidulle buildeille ja deploylle (continuous integration & delivery). Saahan siihen sitten varmaankin vielä automatisoituja testejäkin, mutta palaan siihen toisella kertaa.
Tarkemman version kuvista saat klikkaamalla niitä.
Tarvikkeemme ovat
Visual Studio 2017. VS17 laajennuksia ei välttämättä tarvita mutta tästä linkistä saattaa löytyä jotakin hyödyllistä jolla ‘elämä’ tuntuu mukavammalta http://vsixgallery.com/author/mads%20kristensen .
Ei myöskään ole välttämätöntä, mutta voit myös tutkia ARMClient :tia https://github.com/projectkudu/ARMClient
Azure subscription ja mahdollisuus aiheuttaa hieman kulujakin, mutta ‘spending limit’ kannattaa varmuudenvuoksi laittaa päälle jos käytät Pay-as-you-go tilausta.
VSTS team projekti ja mahdollisuus tehdä build & release määrityksiä.
Lue vielä tämä ennen kun aloitat tekemisen
Tein muutamia muutoksia Jeff Hollanin kaksiosaiseen channel9 video demoon. Lopulta, isommat muutokset siihen on automaatiokelpoinen VSTS pipeline (CI&CD). Muuten noudattelen alkuperäistä esimerkkiä.
AZURE Portal
Uuden Logic App tekeminen
Kliksuttele –New,-Enterprise Integration ja Logic App ikoni.
Täytä tarvittavat tiedot
Name : blogs-csv-to-email
Valitse Subscription
Resource Group (New): ServerlessForBlogs
Location: Sopivin (suomessa esim. West Europe)
Log Analytics (tarpeen mukaan, voi protoiluissa jättää pois)
Pin to dashboard (tavallaan hyvä muikkari)
Klikkaa Create ja odota hetki, kun RG luodaan…
Logic App luotu. Aloita tekemään varsinaista logiikkaa klikkaamalla juuri luotua LogicAppia “blogs-csv-to-email”
Klikkaa sen jälkeen Logic App Designer:
Azure portal voi uudelleen ohjautua LogicApp designeriin – jota seuraavaksi käytetäänkin, mutta klikkaa ko. ikkuna pois oikean reunan ‘X’ stä ja tarkastele tyhjää Logic App näkymää overview tilassa. Huomaa käytössä olevat valikot joista selviää paljon mielenkiintoista. Etupäässä nyt kiinnostaa Designer ja code view. Visual Studio desktopissa toiminnallisuus on sama ja suurimmaksi osaksi se näyttääkin tältä. Se osa käydään läpi tässä kirjoituksessa hieman myöhemmin.
Kun olet valmis, siirry ‘takaisin’ Designeriin klikkaamalla ‘Logic App Designer’.
Valitse tyhjä pohja (Blank Logic App +)
Kirjoita connector & trigger hakuun FTP ja
valitse ‘when a file is added or modified’ trigger FTP connectorista.
Tässä vaiheessa tietenkin tarvitaan FTP palvelin ja osoite + loginit. Sen tekee kädenkäänteessä avaamalla uusi selain ikkuna azure.com: iin ja siitä kliksutellaan tähän samaan resurssiryhmään ja tehdään tavallinen WebApp. Kun se on valmis kopsataan FTP tiedot ‘over view’ näkymästä ja tunnukset salasanoineen sa parhaiten lataamalla publishing settings ja avaamalla sen tekstieditorilla tai VS codella tms.
Avaa vielä FTP clientti ja tee uusi yhteys juuri luomaari FTP palvelimeen. Huomaa että emails hakemisto on luotava FTP palvelimelle, jos haluat seurata kirjaimellisesti tätä opasta.
Tee vielä nyt kun tässä ollaan – vielä testi data faili csv muotoisena, mutta älä viellä siirrä sitä azure ftp saitille.
Ja sitten takaisin Logic App designeriin ja täyttämään FTP connetor triggerin parametrit:
Muut arvot, kuten 3 min intervalli saa jäädä sinne sellaisenaan. Se on ihan ok tähän tarkoitukseen.
Tässä vaiheessa valmiina on FTP yhteys joka herää ‘eloon’ kun emails kansioon tulee tiedosto. Sille tiedostolle halutaankin nyt seuraavaksi tehdä jotakin. Sitä varten tehdään Azure Function App joka lukee sisällön ja toimittaa jatkokäsiteltäväksi jokaisen rivin ja lopulta lähettää ko. rivillä olevaan emailiin muistutuksen.
Uuden Function App tekeminen
Valitaan uusi ‘action’ ja siitä Azure functions. Mutta koska funktio on tekemättä ja siihen tarvitaan hieman koodia. Tallenna nykyinen LogicApp ja/tai avaa uusi selain ikkuna ja navigoi samaan resurssi ryhmään ja tee uusi ‘New+’ Azure portal pää ikkunan vasemmasta yläkulmasta.
Kliksuttele New-Compute-FunctionApp
Näkymään tulee FunctionApp parametrit. Täytä ne:
App Name: blogs-csv-to-email
Subscription: Sama kun Logic Appillekkin
Hosting Plan: Consuption
Location: West Europe (Sama kun Logic Appillakin)
Storage Account: Tee uusi tai valitse haluamasi, kunhan se on sama Location (suosittelen tässä uuden luomista)
Klikkaa Create ja odota hetki.
Sillä aikaa kun Function App deploy on menossa esittelen koodin joka tähän kahteen funktioon tulee. Ensimmäinen on CSV-toJSON
Funktion voi hyvin testata koodinliittämisen jälkeen kun otat näkyviin
Toinen funktio on JSON-to-EMAIL
Kun Function App deploy on valmis Azuressa, valitse blogs-csv-to-email nimen alta functions + (new). Klikkaa ‘Custom Function’ tai Webhook API c# valittuna (generic webhook).
tai ‘Generic webhook C#’ (valitsen tämän tässä esimerkissä)
Kirjoita nimeksi ‘CSV-to-JSON’ ja klikkaa Create.
Generoitu koodi korvataan vastaavalla (yllä) jonka voit hakea git reposta https://github.com/arvopaukkunen/serverless-tutorial-functions1
Korvaan koodi, klikkaa save, klikkaa myös ‘Get Function URL’ ja kopio URL koodi talteen – tarvitset sitä kohta. Tarkemmin sanottuna osaa siitä: (esim huom). Klimmaa vielä ‘View files’ niin saat koodi failit näkyville.
code=bbbbbbbbbbCuwNYeNsBM3OUYGfGqcetL5YYhCUwKs2NPHOfmqtaG1w==&clientId=default
Näkymä pitää tässä voiheessa näyttää tältä:
Sitten samat temput toiselle tarvittavalle funktiolle JSON-to-EMAIL. Jonka jälkeen yllä jo näytetyt koodit ovat kopioituna ja valmiina vaikkapa testiin. Huomaa että JSON-to-Email function template on oltava ‘Generic Webhook JavaScript’. Muista klikata ‘Save’ kun olet kopsannut JavaScript koodit Git reposta.
Ja nyt takaisin Logic App Designeriin lisäämään Azure Function App käsittelemään jokainen rivi joka CSV tiedostosta löytyy:
Ja valitse Azure functions – Juuri luotu Function app ja sen jälkeen juuri luotu CSV-to-JSON –funktio:
Tässä vaiheessa Funktio odottaa ominaisuutt (Property) csv, joten kirjoitan sen actionin request bodyn alkuun. Tämä selviää, kun testaat CSV-to-JSON funktiota antamalla sille hieman aiemmin talteen otetun funktion URL koodin. Et voi kopioda koodia tästä esimerkistä, vaan suorita funtio saman näköisessä ikkunassa kun pyysin ottamaan URL koodin talteen. esimerkki ko. ikkuasta tässä alla. Huomaa että view files bladessa on ‘test’ osa johon tarvittava koodi syötetään. voi myös kopsata request bodyn tästä:
{
"csv": "Name,Email,Date\r\nCustomer Name,nimi@jokudomain.com,1/1/2017\r\nCustomer Name,nimi@jokudomain.com,1/1/2017"
}
Tuloksena pitää olla 200 – ok ja:
{"rows":[{"Name":"Customer Name","Email":"nimi@jokudomain.com","Date":"1/1/2017"},{"Name":"Customer Name","Email":"nimi@jokudomain.com","Date":"1/1/2017"}]}
Malli tässä:
Tässä oli ensimmäinen ‘action’. Sitten tehdään seuraava jossa käytetään parse jsonia, koska muuten tarvittava ‘for each’ ei tiedä mitään luettavan csv failin rivimääristä ja ‘näkee’ vain request bodyn. Eli lisätään Data Operations – ParseJSON:
valitse ‘body’ täg vaihtoehdoista ja käy kopsaamassa edellä kopiotu payload schemaa varten (koska se on tällätävalla helpoin ja nopein tapa saada schema). Tässä viellä uudelleen payload joka saatiin ajamalla funktio:
{"rows":[{"Name":"Customer Name","Email":"nimi@jokudomain.com","Date":"1/1/2017"},{"Name":"Customer Name","Email":"nimi@jokudomain.com","Date":"1/1/2017"}]}
Liitä payload tähän…
Klikkaa ‘Done’ ja tässä valmis schema käytettäväksi.
validin JSON scheman saa muullakin tavoin mistä vaan, mutta näin se generoidaan nopeasti poistumatta editorista.
Ja nyt lisätään vasta ‘for each’ luuppi ja voidaan valita ‘array’ joka on ‘näkyy’ ja on siis tiedossa.
valitse New Step – More – Add a for each ja sen jälkeen ‘rows’
Sitten valitaan JSON-to-Email Funktio joka kopioitiin Git reposta hieman aiemmin jo valmiiksi.
Nyt jo tuttuun tyyliin – klikkaa Azure Functions ja valitse Function app ja sen JSON-to-Email funktio.
Ja koska funktio odottaa koko objektia, valitaan ‘rows item’
Seuraavaksi tarvitseekin enää vain valita email lähetys filtteröimällä outlook konnektori ja valitsemalla alta send mail:
valitse Send Mail:
Kirjaudu emailiisi ja aseta tarvittavat tiedot lähetykseen:
Huomaa, että Funktio nimet näkyvät ja nyt valitaan tietty ‘JSON-to-Email’
Ja muista viimeistään tässä klikata ‘Save’
Valmiinä sen tulee näyttää tältä:
Logic App Testaus
Kuvassa näkyy tallennuksen jälkeen kuinka 3 min välein tarkistetaan FTP palvelin uusien csv tiedostojen varalta.
FTP palvelimelle täytyy nyt saada csv tiedosto ja se onnistuu siirtämällä alkuosassa kirjoitusta näyttämäni kaksi data riviä sisältävän tiedosto sinne. Sen jälkeen vain odotetaan 3 min (huom. FTP laskee täysiä minuutteja)
FTP siirto:
Pari vinkkiä vielä edelliseen
Debuggailin vielä tätä em. logic appsia ja huomasin että jos tulee tarve jostakin syystä tarkistaa tai muuttaa FTP palvelun tunnuksia tai osoitetta, on kätevää katsoa arvot API connection kohdasta tästä samasta resurssi ryhmästä. Eli tässä tapauksessa
blogs-csv-to-email – API Connections
DevOps CI & CD – VSTS
Kun aloitetaan Visual Studio Team Services kanssa käytän jo Git repositorio tässäkin mallissa. Git Repo jonka olen jakanut, on yleiseen käyttöön ja sitä en käytä tässä esimerkissä. Seuravaksi kuitenkin kaikki Logic app koodit on saatava Git repoon jotta build & release voitaisiin automatisoida. Function app ja itse funktio koodithan jo on versionhallinnassa ja Gitissä, joten nyt puuttuu vain varsinainen Logic App. Siinä onkin sitten hieman eri tarina, koska nyt puhutaankin deploymentista Azure Resurssi ryhmään – tarkemmin sanoen juuri Resource Group deployment.
Käytännössä se mitä todella halutaan deploymenttiin laitetaan nyt omaan repoon Gittiin ja ennen sitä voit köydä kurkistamassa miltä se näyttää kliksuttelemalla https://resources.azure.com . Tässä malliksi näkymä tämän jutun resurssiryhmä.
Se mitä se pitää sisällään ei olekaan jotakin koodia paikallisessa kehityskoneessa ja/tai versionhallinnan repositoriossa. Toinen huomioni oli (ensin) se, että sen saaminen ei vaadikaan oikeastaan power shell ja muita kikkailuja. Nyt koko prosessin voi tehdä suoraan Azure saitilta lataamalla exportin ulos sellaisenaan parametreineen. Kätevää! Mutta tämä ei käytännössä toimikkaan kun delivery automatisoidaan loppuun saakka. Ei ainakaan tässä tapauksessa…Ei se silti kovin kaukana kätevästä ole, kunhan olet tullut tutuksi template creatorin kanssa ja bildaat sen omalla koneellasi. (alla linkissä on myös ohjeet)
Kuitenkin… melko yksinkertaisesti saa exportin ulos power shellilläkin, kun seuraat ohjeita https://github.com/jeffhollan/LogicAppTemplateCreator
Ja tyrkkäät menemään tällasen setin komentoja :
Login-AzureRmAccount
Get-LogicAppTemplate -LogicApp blogs-csv-to-email -ResourceGroup ServerlessForBlogs -SubscriptionId 86db547a-oman-azure-subscriptionin-id-4496-8460-0a7213575091 –TenantName omantenantinnimi.onmicrosoft.com | Out-File C:\src\Azure-logicApp-template.json
Get-ParameterTemplate -TemplateFile C:\src\Azure-logicApp-template.json | Out-File C:\src\paramfile.json
Get-ParameterTemplate -TemplateFile C:\src\Azure-logicApp-template.json -KeyVault Static | Out-File C:\src\KeyVault.json
Tai kliksuttele Resurssiryhmään ja valitse sen bladesta Automation Script + Download.
Se mitä saat ‘ulos’ sisältää deployment templaten ja parametri jsonit. Ne laitamme Git repoon versionhallintaan, jotta voimme automatisoita deploymenttiin saakka kun jotakin näissä muutetaan ja commitoidaan Gitiin.Commit toimii build & releasen triggerinä joka vahvistetaan email ilmoituksella VSTS:n toimesta.
Huom ! kokeile myös http://armviz.io/designer
VSTS – Valmistelut
Jos et ole jo niin tehnyt, luo VSTS Tiimi projekti. Tee se omaan tai käytössä olevaan tenanttiisi. Tässä mallissa käytän omaa tenanttiani joka on arvosoft.visualstudio.com. Voi t myös otaa kopion julkisesta Gitistäni, jonka osoite on tuolla aiempana mainittuna.
Tässä stepit Tiimi projektin tekemiseen ja ensimäisen repon luomiseen Azure Function Appeille. Toinen repo tulee Azure Logic App resurssiryhmän deploymentille.
Step 1 – Luo uusi
Step 2 – Nimeä se esimerkiksi resurssiryhmän nimellä kuten kunnon demo friikki…
Step 3 – lopulta valmiina tällainen
Seuraavaan vaiheeseen löytyy monia tapoja ja varmasti kätevämpiä kun tässä nyt näytän, mutta tällä tavoin voi visuaalisesti hyödyntää Visual Studio Git integraatiota.
Klikkaa mukaan readme & Gitnore. Kloonaamme tämän jälkeen vuoronperään molemmat git repot tyhjinä omalle koneelle.
Uuden Git repon teko:
ja
Ja sitten kloonataan (in Visual Studio IDE) nämä omalle koneelle. tein itse polun joka on C:\src\ServerlessForBlogs\LogicApps, jonka jälkeen sen sisällön tulee näyttää tältä:
Eli tyhjää täynnä, paitsi valitsemamme Git failit. Nyt on koodien vuoro. Koodeista LogicApp resurssiryhmän skriptit ovat jo valmiiksi exportattuna omalle koneelle, joten avaan file exlorerin kaksi ikkunaa joissa on exportattu hakemisto (unzipattuna) ja git hakemisto (visual studio).
ja funktiot teen niin että luon uuden visual studio solutionin ja kopioin Azureen jo tehtyjen funktioiden koodit sille.
Huom. Älä luo Git repoa, koska se on jo tehty kloonaamalla
Sen jälkeen se näyttää tältä: (paremmin organisoituna hieman alempana)
Funktio CSV-to-JSON VSTS (ja VSTS JSON-to-Email)ja Visual Studio IDE
ja koodi:
Funktio JSON-to-Email VSTS ja Visual Studio IDE
Tee commit ja sync molemmille. tarkista että VSTS repositoreihin tuli myös koodit. Seuraavana vuorossa on DevOps…
Deployment repo josta saa mallikoodit on https://github.com/arvopaukkunen/serverless-tutorial-deployment1
Azure Resource Group Deployment
Tein power shell komennoilla (yllä aiemmin) JSON failit Azure resource group templaten jossa on kaikki tähän projektiin liittyvät kilkuttimen mukana. Kopioin ne Visual Studio projektiini ja synkkasin Git repoon VSTS tiimiprojektiini.
Se näyttää nyt tältä:
Korvasin Visual Studio Azure resource group projekti templaten luomat JSON failit jotka olivat tietty tyhjää täynnä olevat geneeriset jasonit.
Nyt kun avaan LogicApp.json failin solution explorerista hiiren oikealla, voin valita edit in designer ja – editori on saman näköinen kun Azure portaalissakin.
Tarkista deployment parametrit
Avaa deployment klikkaamalla hiiren oikealla ja valitse deployment:
Varmista että parametrit ovat oikein. Voit myös muuttaa deploymentin resource grouppia ja / tai lokaatiota ihan mihin tagansa. Deploymet voi siis myös kloonata jo olemassa olevan toiseen paikkaa ja toisen nimiseksi.
ja parametrit:
Älä kuitenkaan tee deploymenttia vielä, varmista vain että parametrit ovat oikein.
Tämä sen takia, että siitä puuttuu vielä erittäin oleellinen osa end to end deployment prosessia (pipeline). Se on Azure funktiot jotka teimme ensimmäiseksi.
Nyt on aika lisätä ne paikalleen.
Azure Funktio mukaan resource group deploymenttiin
Valitaan siitä tarvittavat osat omaan projektiin ja deploymenttiin:
Ja sen pitäisi näyttää Visual studio projektin LogicApp.JSON issa tältä:
Muuttujat…
Ja lopuksi resurssit…
Aina alas asti …
Ja viimein, parin yrityksen jälkeen ja sulkumerkki virheiden korjaamisen jälkeen pääsin tarkistamaan JSON outliner toiminnolla JSON oikeellisuuden näin:
Enää puuttuu vain viittaukset ja varmistus että funktiokoodit ovat ajantasalla. Sen jälkeen tässä on valmis ’end to end’ LogicApp & FunctionApps deployment ‘paketti’
CI & CD
Esimerkin koodit on kloonattavissa täältä (sama linkki oli yllä aiemmin):
https://github.com/arvopaukkunen/serverless-tutorial-functions1
Kopioi source control osa
https://github.com/Azure/azure-quickstart-templates/tree/master/201-web-app-github-deploy
Kun JSON outliner Visual Studio IDS : ssä näyttää tuossa kun yllä, puuttuu viellä sourcecontrols resurssi. Se on varsinainen juju kokohommassa ja määrää resurssi ryhmä deploymentin hakemaan koodit Git reposta ja varmistaa että logic app sisältää myös function appin.
Depends on haluaa sitenamen sijaan functionapp nimen:
"resources": [
{
"apiVersion": "2015-08-01",
"name": "web",
"type": "sourcecontrols",
"dependsOn": [
"[resourceId(’Microsoft.Web/Sites’, parameters(’siteName’))]"
],
"properties": {
"RepoUrl": "[parameters(’repoURL’)]",
"branch": "[parameters(’branch’)]",
"IsManualIntegration": true
Korvaa yllä oleva
"[resourceId(’Microsoft.Web/Sites’, parameters(’siteName’))]"
Tällä
"[resourceId(’Microsoft.Web/Sites’, variables(’functionAppName’))]"
Nyt ollaan jo siinä vaiheessa että voidaan varmistaa VSTS CD ja CI on konfiguroitu oikein.
[tähän kuva CD stä]
[tähän kuva CI stä]
Konseptin määrityksiä
Yritän vääntää suomenkielelle monille jo tutut masterdatan määritelmät. Hieman huvitti käännöstä tehdessänikin, mutta kyllä siitä minusta ihan ymmärrettävää tuli. Tosin ei se ihan ysinkertaiselta heti kuulosta.
MDS Mallinnus Konseptina (=suunnitelma, ohjattu tai rajoitettu malli toimia tai toteuttaa)
Masterdata services on joukko suhteellisen yksinkertaisia konsepteja. Nämä konseptit muodostavat data joukkoja (Containers) ja palveluja jotka on käytettävissä ja esillä MDS järjestelmässä. Nämä konseptit on helppoja ymmärtää sellaisenaan. Konseptien tukemat vaihtelevat ja monimutkaiset skeemat muodostaa kummatkin – monimutkaisuuden ja tehon joka MDS järjestelmässä on. Ennen mallin objektien toteuttamista, on syytä käydä läpi niiden määritykset.
Mallit (Models)
Organisaation korkein taso MDS:ssä. Mallit eivät ole muuta kun toisistaan riippuvaisia entiteettejä. Vain entiteeteillä samassa mallissa voi olla riippuvuus suhteita keskenään.
Entiteetit (Entities)
MDS:n perus kokoelmat datasta. Yksinkertaisimmillaan, entiteetit voidaan ajatella olevan kuten tietokannassa taulut. Käyttäjät kontrolloivat atribuutteja (sarakkeet/columns) jotka hallitaan jokaisen entiteetin avulla. Jos Eksplisiittisesti (yksityiskohtaisesti/selvästi) määritellyt hierarkiat ovat käytössä entiteetissä, muostuvat nämä entiteetit huomattavasti monimutkaisemmaksi. Se ilmenee isäntä jäsenissä ja niiden konsolidoiduissa jäsenissä niin kuin myös niiden ryhmittelyissä (collections)
Jäsenet (Members )
Tallennetuja tietoja joilla entiteetit on täytetty. Ne voivat olla joko päätason (leaf) tai konsolidoituja jäseniä. Päätason – leaf jäsenet ovat primääri jäseniä entiteetissä. Jos entiteetillä on käytössä eksplisiittiset hierarkiat ja ryhmittelyt, voidaan luoda konsodoituja jäseniä ja niille omia attribuutteja.
Attribuutit (Attributes)
Kuvaavat jäseniä. Karkeasti ajatellen ne voidaan ajatella olevan tietokantataulun kenttiä. Entiteetit pitävät sisällään jäseniä ja niiden attribuutti arvoja. Attribuutit voivat olla joko vapaamuotoisia tai domain rajoitteisia.
Domain attribuutit (Domain-based attributes)
Attribuutit joiden sisältämät arvot on rajattu jäseniin jotka ovat liitetty tietystä entiteetistä.
Hierarkiat (Hierachies)
Konsolidoituja tai jäsenten ryhmittelyjä joita käytetään apuna raportoinnissa ja analysoinneissa. On olemassa kaksi hallintatapaa, eksplisiittinen ja periytetty. Hierarkiat tuottavat tai varmistavat lopputuloksen jossa arvoja ei voida tuplata tai hävitä loppukäyttäjäsovelluksissa.
Ryhmittelyt (Collections)
Tarjoavat mahdollisuuden joustavaan ryhmittelyyn jollaista hierarkiat eivät voi tukea.
Power BI saadaan vihdoin upetettua iFrame :een.
Mukava ominaisuus tuotiin julki build tapahtumassa jokin aikaa sitten.
Tässä lyhyt yhteenveto kuinka se tehdään
Tarvitset PowerBI raportin, AZURE tilin ja Visual Studio 2015, sekä roppakaupalla kärsivällisyyttä nugettien kanssa, koska kyseessä on preview komponentit.
AZURE:
Tee uusi resurssiryhmä. Huomaa että vain South Central US on tarjolla tässä preview versiossa.
Resurssiryhmään tulee tehdä uusi PowerBI työtila. Valitse – New – Marketplace / Data + Analytics / PowerBI Embedded
Täytä tarvittavat tiedot työtilan luomiseksi ja valitse alereunasta ‘Create’
Pin to dashboard ei ole ollenkaan huono idea. Tosin jos demoilet paljon – voi niitä tulla sitten hieman liikaakin – mutta pysyypähän muistissa
Ja sitten se näyttääkin tältä.
Tässä vaiheessa voitkin ottaa talteen tiedot, jotka on tarpeen varsinaisen raportin upotuksessa apuohjelman työtilan ja sen raportin provisiointia varten.
’Access keys’ osa löytyy nyt oikeanpuolimmaisena näytölläsi. valitse ‘copy’ settings kohdasta ja liitä sen key 1 muistiinpanoihisi. Samoin Työtilan teossa kirjoitamasi muutkin tiedot. Tarvitset niitä provisiointiin tehdtyyn apuohjelmaan, jonka voi ladata täältä. https://github.com/Azure-Samples/power-bi-embedded-integrate-report-into-web-app/
Microsoftin toimittama aluperäinen artikkeli löytyy täältä:
https://azure.microsoft.com/nl-nl/documentation/articles/power-bi-embedded-get-started-sample/
TIEDOT MUISTIIN:
– Key 1 (esimerkki)
UJHmCRNPc0fcx7vi70nUo++Ghh4H0t+2Di2dKWJW2Eg/F5Erggy70vjwQ5J69bRCUM7xk1fZ0lHL3S7T+vqNCA=
– Subscriptionid (esimerkki)
397ec54d-XXXXX-41fe-XXX-06655b6xxxxx
– Workspace Collection name
ArvoPowerBI2
– Workspace ID (esimerkki)
9d453247-36fd-4bdf-ba0c-d05526920614
– PowerBI raportti faili
E:\Users\Arvo Paukkunen\OneDrive\Downloads\PowerBi\Retail Analysis Sample.pbix
DEMO – video
Visual Studio
Tutkin malleja ja ratkaisuja jonkin verran ja vietin lopulta suurimman osan ajasta nugettien säätämisessä. Aloitan siksi tässä siitä. Taivottavasti tämä nopeuttaa turhattavinta osaa tästä ja pääset nopeammin toisi toimiin .
Esimerkki ohjemassa tuntui kaikki olevan kohdillaan, joten kokeillessani erästä toista, tuli nuo ongelmat eteen. Tässä malli joka toimi lopulta minulla:
Lataa ja avaa tämä visual studio MVC projekti MyPowerBI
Ensimmäisenä temppuna varmista että oikeat nugetit on mukana. Itse jouduin lataamaan kaikki yksitellen ja kokeilemaan missä vaiheessa virheet loppuivat. Alinna löytyy ’tältä se näyttää’ kuva siitä kun oikeat nugetit on tämän päivän powerbi embedded version kanssam sulassa sovussa. Tämän kuvasarja kertoo maanläheisen tavan varmistaa että saatavilla olevat, asennetut ja päivityksiä saatavilla versiot ei aiheuta liiemmin päänvaivaa
Vaihe 1 – ilman prerelease versioita (browse – saatavilla)
ilman prerelease versioita (installed – asennettavat tässä versiossa )
Prerelease versioiden kanssa
Asennetut – ei erikseen pre versiota
En päivittänyt mitään noista. päivitys voi tietty tulla kyseeseen, mutta sen näet buildin jälkeen.
Muutokset itse koodiin on vain:
web.config failiin:
<appSettings>
<add key=”webpages:Version” value=”3.0.0.0″ />
<add key=”webpages:Enabled” value=”false” />
<add key=”ClientValidationEnabled” value=”true” />
<add key=”UnobtrusiveJavaScriptEnabled” value=”true” />
<add key=”powerbi:AccessKey” value=”xxxxxxxxxxxxxxxxxxxx” />
<add key=”powerbi:ApiUrl” value=”https://api.powerbi.com” />
<add key=”powerbi:WorkspaceCollection” value=”NimiNimiNimiNimi” />
<add key=”powerbi:WorkspaceId” value=”xxxxxxxxxxxxxxxxx” />
</appSettings>
Kun ongelmia ei näy ja yllä olevat parametrin on syötetty, voit ajaa uuden MVC asp.net sovelluksen ja alkaa protoilla miten iFrame voitaisiin liittää omaan ohjelmaasi.
DEMO – video:
Kommentoi ja anna palautetta. Minut saa kiinni myös Bilot Oy mailista.
Tein Azure ympäristööni parannuksia muuttamalla domain kontrollerin Server coreksi, että saisin sen vieläkin edullisemmin ja säästäisin virtuaali- rautaa. Tätä tehdessäni tuli mieleen että, miten saisin kätevästi tehtyä varmuuskopion – jos core muutoksessa menisikin jotain pieleen tai haluaisin palauttaa käyttöliittymällinen domain kontrollerin nopeasti – ilman käyttökatkoa…tai edes lähes
Tässä testattuna ja hyväksi todettuna. Tässä siis suomennettuna ja testattuna. Ole varovainen palautuksen kanssa. Virtuaalikone todellakin tuhotaan operaation aikana. Sen palauttaminen keskeytyneen skriptin tms. jälkeen voi olla haasteellista… Onnistuin itse välillä kaatamaan palautuksen kun data levyjä oli useampia. Palauttelin tällaisen jälkeen vm:n Azure Management Studiolla (http://www.cerebrata.com/products/azure-management-studio/introduction)
Ensinnäkin en alkanut ensin lisäämään automaatiota, vaan tein yhden Azure virtuaalikoneen kerrallaan. Nyt käytän varmistuksiin ja palautuksiin ‘manuaalisesti’ koneen mukaan nimettyjä PowerShell skriptejä.
Varmuuskopiointi koostuu seuraavista vaiheista:
- Olettamukset ja valmistelut
- Valitse virtuaalikone joka kopioidaan
- Identifioi jokainen virtuaali- levy
- Luo storage container varmistuksen tallennukseen
- Varmuuskopio virtuaali koneet cloud storageen Windows Azuressa.
Aluksi tarvitaan ‘olettamukset ja alustus’
Lokitus omaan paikalliseen hakemistoon ja muuttama muu juttu…
Jos sinulla sattuu olemaan useita Azure tilauksia (subscriptions) ja haluat jonkin käsittelyyn jonkin muun kun nykyisen online profiiliisi linkatun tilauksen. Varmista seuraavalla skriptillä oikea kohde. Minulla esimerkiksi on arvosoft@hotmail.com vain protoiluun ja muutamia muita Microsoft tilejä eri asiakas ja kehitys projekteihin.
Muussa tapauksessa vain sertit import ja azure on autentikoitu…
Get-AzureVM tekee listan virtuaalikoneista tässä tilauksessa ja nyt autentikoidulla sertifikaatilla. Alla olevassa kuvassa on kaikki koneet pois päältä ja silloin niitä ei voida käsitellä. Ainakin käsiteltävä kone on oltava päällä ja provisoituna normaalisti. Skiripti sammuttaa sen , mutta jättää tilaan ready (allokoitu)
Kun domain kontroller virtual kone on käynnissä näyttää Get-AzureVM tulos tältä:
Valitse virtuaali- kone, joka varmistetaan
Kone voidaan valita cmdletillä Get-AzureVM. Kun ajat sen ilman sellaisenaan, saat listan provisioiduista virtuaalikoneistasi. Talleta haluttu virtuaalikone $vm muuttujaan ja pysäytä se jättäen se provisioituun tilaan.
Varmistus, että virtuaalikone on oikeassa tilassa:
Paikallista ja tunnista tarvittavat OS ja Data levyt
OS levyjä on vain yksi, mutta data levyjä voi tietysti olla useampia. Ne haetaan omiin muuttujiinsa ja Data levyt ovat ‘collection’ ja ne pitää luupata läpi.
Luodaan storage container käyttämällä medial link ominaisuutta.
Ja vielä varmistus, että storage luotiin oikein. Sen voi tietenkin kurkata myös muilla työkaluilla tai azure web hallinta saitilla.
Tässä power shell ja saitti:
Nyt on kaikki valmista varsinaisen varmistuksen tekoon. Ensin muutama variaabeli Blob käyttöön ja sitten menoksi…
Yllä muuttujan ja varmistus, että ne on muodostettu oikein.
On hyvä huomioida, että kopiointi on asynkroninen ja se toteutetaan taustalla. CopyState:lla voidaan varmistaa edistymisen tila.
Enää jäljellä onkin data levyjen varmistuskopiointi, joka toteutetaan luuppaalla kaikki läpi.
Tässä tapauksessa, koska muita levyjä ei ollut lopputulos näyttää tältä:
Varmistuksen palauttaminen
Ehkä tärkeämpi osuus tässä on edellisen osan varmistusten palauttaminen. Tässä sen vaiheet:
- Valitse palautettava virtuaalikone
- Paikanna ja identifioi jokainen virtuaalilevy joka palautetaan
- De-provisio virtuaali kone palautettavaksi
- Palauta virtuaalikoneen käyttöjärjestelmälevy (OS Disk)
- Palauta virtuaalikoneen muut levyt, jos sellaisia on.
- Uudelleen provisioi virtuaalikone
Valitse palautettava virtuaalikone
Edellisen osan varmistuskopioitu virtuaalikone voidaan valita komennolla Get-AzureVM. Ilman parametreja sellaisenaan suoritettuna se palauttaa listan virtuaalikoneista jotka ovat provisioitu – käytettävissä tällä hetkellä.
Get-AzureVM
Tietyn virtuaalikoneen valinta tehdään laittamalla ServiceName ja Name arvot parametreiksi ja ohjaamalla tulos uuteen variaabeliin.
$vm = Get-AzureVM -ServiceName ArvoLab-ARVOSOFT -Name ARVOSOFTDC
Tämän jälkeen valittuun virtuaalikoneeseen voidaan viitata variaabelilla $vm.
Samaan tapaan kun edellisissä osassa, on virtuaalikone oltava samutettuna, mutta provisioituneena. Se kuitenkin käynnistetään lopuksi erillisellä komennolla aivan viimeisenä.
$vm | Stop-AzureVM –StayProvisioned
Kun kone on oikeassa tilassa, voidaan edetä seuraavaan aiheeseen, jossa paikallistetaan ja identifioidaan virtuaalikoneen kaikki virtuaali levyt jotka halutaan palauttaa.
Paikanna ja identifioi jokainen virtuaalilevy joka halutaan palauttaa
Käyttöjärjestelmälevyn sijainti haetaan tallennusta varten komennolla Get-AzureOSDisk .
$vmOSDisk = $vm | Get-AzureOSDisk
Kaikilla virtuaalilevyillä on kaksi ominaisuutta jotka ovat tarpeen varmistuksissa ja palautuksissa. nämä ovat DiskName ja MediaLink arvot jotka näkyy kuvassa alla. Näillä tiedoilla saamme kunkin virtuaalikoneen kaikki levyt varmuuskopioitua ja palautettua.
Common Property Values for a Windows Azure Virtual Hard DiskMuiden kun käyttöjärjestelmä levyjen vastaavat toimenpiteet (sijainti) tehdään komennolla Get-AzureDataDisk. Koska virtuaalikoneilla voi olla useita levyjä tuloksena palautuu tietojoukko (collection of DataVirtualHardDisks).
-
De-provisioi virtuaalikone palautettavaksi
Provisioidut virtuaalikoneet pitävät kirjaa levyistään – ja muista ominaisuuksistaan – ettei ne ole vahingossa tai epähuomiossa poistettu tms. Tämän takia virtuaalikoneen konfiguraatio on varmistettava kopioimalla se talteen paikalliselle levylle ensin ja sitten kyseinen virtuaalikone ‘tuhotaan’ uuden palautettavan koneen tieltä. Tämä on kuitenkin onneksi yksinkertaisesti tehtävissä vain muutamalla lisärivillä PowerShell koodia.
Ensin, Luodaan uusi paikallinen kansio XML failia varten. Virtuaalikoneen konfiguraatio xml tallennetaan tänne palautuksen ajaksi.
$exportFolder = "C:\ExportVMs"
if (!(Test-Path -Path $exportFolder)) {
New-Item -Path $exportFolder -ItemType Directory
}
Ja tänne kopiodaan XML faili jota käytämme palautusprosessin loppuvaiheessa re-provisioinnissa.
$exportPath = $exportFolder + "\" + $vm.Name + ".xml"
$vm | Export-AzureVM -Path $exportPath
Kun kopiointi on varmasti tehty voidaan suorittaa Remove-AzureVM komento jolla virtuaalikone poistetaan/tuhotaan palautuksen valmistelutoimenpiteenä.
-
Remove-AzureVM -ServiceName $vm.ServiceName -Name $vm.Name
Restore Windows Azure VM OS Disk
Tässä vielä muutama variaabeli palautuksen onnistumiseksi.
$vmOSDiskName = $vmOSDisk.DiskName
$vmOSDiskuris = $vmOSDisk.MediaLink
$StorageAccountName = $vmOSDiskuris.Host.Split(’.’)[0]
$vmOSBlobName = $vmOSDiskuris.Segments[-1]
$vmOSOrigContainerName = $vmOSDiskuris.Segments[-2].Split(’/’)[0]
$backupContainerName = “backups”
Koska virtuaalikoneen poiston jälkeen on usein levyissä tieto niiden liitoksesta tiettyy virtuaalikoneeseen, on tässä hyvä odottaa hetki suorittamalla while loop tarkistamaan liitoksen poistuminen.
While ( (Get-AzureDisk -DiskName $vmOSDiskName).AttachedTo ) { Start-Sleep 5 }
-
Sen jälkeen poistaminen onnistuu.
Remove-AzureDisk -DiskName $vmOSDiskName –DeleteVHD
-
Poiston jälkeen palautus voidaan suorittaa komennoilla Start-AzureStorageBlobCopy ja Get-AzureStorageBlobCopyState :
Start-AzureStorageBlobCopy -SrcContainer $backupContainerName -SrcBlob $vmOSBlobName -DestContainer $vmOSOrigContainerName –Force
-
Get-AzureStorageBlobCopyState -Container $vmOSOrigContainerName -Blob $vmOSBlobName –WaitForComplete
-
Add-AzureDisk -DiskName $vmOSDiskName -MediaLocation $vmOSDiskuris.AbsoluteUri -OS Windows
-
Tähän loppuu käyttöjärjestelmälevyn palautus prosessi.
Palauta virtuaalikoneen muut mahdolliset levyt
Koska levyjä voi olla useita, käytetään tässä for each looppia läpikäyntiin
ForEach ( $vmDataDisk in $vmDataDisks ) {
$vmDataDiskName = $vmDataDisk.DiskName
$vmDataDiskuris = $vmDataDisk.MediaLink
$vmDataBlobName = $vmDataDiskuris.Segments[-1]
$vmDataOrigContainerName = $vmDataDiskuris.Segments[-2].Split(’/’)[0]
While ( (Get-AzureDisk -DiskName $vmDataDiskName).AttachedTo ) { Start-Sleep 5 }
Remove-AzureDisk -DiskName $vmDataDiskName –DeleteVHD
Start-AzureStorageBlobCopy -SrcContainer $backupContainerName -SrcBlob $vmDataBlobName -DestContainer $vmDataOrigContainerName –Force
Get-AzureStorageBlobCopyState -Container $vmDataOrigContainerName -Blob $vmDataBlobName –WaitForComplete
Add-AzureDisk -DiskName $vmDataDiskName -MediaLocation $vmDataDiskuris.AbsoluteUri
}
Tämän jälkeen kaikki levyt ovat valmiina ja virtuaalikone voidaan provisioida.
Uudelleen provisio virtuaalikone
Tähän käytetään Import-AzureVM komentoa. Uudelleen provisioinnin jälkeen virtuaalikoneen tiedot ovat liitetty palautettuun kopioon koneesta alussa tallennetun XML konfiguraatiotiedoston mukaan.
Import-AzureVM -Path $exportPath | New-AzureVM -ServiceName $vm.ServiceName -VNetName "InSpeed-network"
Siinäpä se!.
Kiitokset / Special thanks for excellent article beleongs to Keith Mayer
Tämän inspiraationa löytyy alkuperäinen Keith Mayerin ratkaisu hänen blogista:
Etsin jonkin aikaa joustavaa tapaa kovertoia VMWare virtuaalikoneeni Winows 7 koneeltani Windows 8 koneen uuteen ympäristööni, jonka juuri päivitin Windows 8 : ksi.
Windows 8 tuo mukanaan 64 bit Hyper-v virtualisoinnin, joten en enää tarvitse VMWarea labra koneitani varten. Winows 7 koneessa, kun oli vain 32 bit virtualisointi ja se ei riitä esim. 5 koneen sharepoint farmiin, jossa on SQL 08/2012 kannat sekä ORACLE 11 ja essbase ym.
Ensin sopivaa työkalua ei tuntunut löytyvän millään ja kaikki tuntuivat olevan liian pitkälle vietyjä ratkaisuja ja tarkoitettuja oikeaan tuotantoympäristöön – läppärillä pyörivän labra ympäristön sijaan.
Lopulta löysin sysinternals työkalun nimeltä Disk2vhd v. 1.63. Sillä homma käy todella napakasti ja virtuaalikoneet jopa vievät nyt vähemmän tilaa kun VMWare versiot. Tosin tilan muutos taisi tulla snapshottien poistamisesta…
Työkalu on tarkoitettu fyysisen koneen muuntamiseen virtuaaliseksi. Hyvä juttu oli se, että käynnistin sen VMWare virtuaalikoneessa ja ohjelma muuttaa kiltisti sen siitä Hyper-v koneeksi – ihan kun VMWare olisi fyysinen kone. Sitähän juuri hainkin.
Alun hankaluutena on kuitenkin se, että VMWare ei voi olla samalla koneella Hyper-v asennuksen kanssa. Siitä pääsee ohi yksinkertaisesti poistamalla hyper-v ja sen jälkeen käynnistämällä tarvittavat VMWare koneet yksi toisensa perään ja kopsaamaalla Disk2vhd ko. koneella ja suorittamalla se niin että uusi VH faili tulee ulkoiselle kovalevylle – jos läppärin levylle ei mahdu.
Käytännössä installoin ensin heper-v n testatakseni sitä, mutta huomasi pian että saaakseni VMWaren toimimaan – se tuli poistaa. Kokeilin näin yhden virtuaali koneen ja testasin konversion. Sitten poistin hyper-v n ja konvertoin kaikki loput koneeni – noin 200 Gigaa. Sitten asensin hyper-v n takaisin ja otin sen käyttöön sekä poistin VMWaren.
Tämä vei aikaa muutaman päivän verran – joulun pyhien aikana…
Tässä muutama aiheeseen liittyvä linkki:
http://technet.microsoft.com/en-US/sysinternals
http://simon.rozman.si/computers/virtual/copy-physical2vhd
http://www.jaylee.org/page/Hyper-V-Virtual-Machine-Mover.aspx
http://www.jaylee.org/post/2008/10/How-to-convert-a-big-VMWare-VMDK-into-an-Hyper-V-VHD.aspx
http://4sysops.com/archives/free-vmdk2vhd-convert-vmware-vmdk-to-hyper-v-vhd/
http://www.aaronpalermo.com/wordpress/archives/32
Microsoft solution accelerator
Muuten hyvä tuotos, mutta esimerkiksi minun tapauksessa käytössä on vain Vmware player imaget tai Vmware desktop – ei esx tms serverituotetta. Silloin vain yllä oleva esimerkki toimii ei tuo muuten niin hyvä solution accelerator
En viellä kerinnyt kokeilla cmd line käyttöä, joka on lupaavan oloinen dokumentaation puolesta (voisi ehkä toimiakkin):
MVDC.exe ’.\VMDK\Test.vmdk’ ’.\vhd\Test.vhd’
Paina Windows + R
Kirjoita slui 3
Klikkaa OK (tai paina enter)
Kirjoita tuoteavain ja klikkaa Activate
Muuten ok, mutta allaoleva ei ihan toiminut… laitan tähän postaukseen lisäinfoa, kun keksin miksi online profiilillani tämä ei toiminutkaan niin kuin odotin… Löytyi ja olihan se paljon helpompaa kun eräs twiikkaus saitti ehotteli – ja paljon – ei ollenkaan niin hieno, koska ei tarvinnut enää itse keksiä mitään – se oli jo tehty – niin kuin ennenkn. Tutkin hieman sitä twiikkaus saittia ja sitä toimiiko siellä mikään…
Selitys löytyy painamalla windows painikella ja kirjainta I (ilmari) ja navigoi itsesi asetusten personalisointiin. kuva tuolla alla…
Aina sitä pitää päästä twiikkaamaan uutta käyttistä tässä kikka joka ei ole vaikea löytää hakukoneillakaan ja ilman tätä eitietenkään voi tehdä duunia ?
Avaa windows haku
ja kirjoita siihen gpedit.msc – ja paina enter.
Avaa sovellus ja navigoi alla olevan mallin mukaan editointi ikkunaan:
Tuplaklikkaa valittu rivi ja editoi tiedot seuraavan mallin mukaan – laita haluamasi kuva ja homma on tehty.
Tällä muokkaus onnistui paremmin:
Ja sitten:
Muuta Logout Screen for all Accounts
-
Metro näytöllä kirjoita run ja paina enteriä.
-
Kirjoita sitten gpedit.msc tekstilaatikkoon ja paina OK
-
Navigoi Computer Configuration -> Administrative Templates -> System -> Logon
-
Enable the policy “Always use custom logon background"
Tuli eteen tilanne, jossa asiakas tarvitsee kertaluontoisen datan siiron DB2 kannasta AS400 koneelta Windows koneelle SQL Server 2008R2 kantaan. Ja luonnollisesti kertaluontoisuus tarkoittaa, että homma pitää pystyä toistamaan, mutta ei automatisoimaan – kuten ETL prosessit.
Esittelen yhden ratkaisun, joka löytyy varmasti muualtakin verkon blogi saiteilta – kuten Michelle Gutzait blogeissa linkatuista server konfiguraatioista http://www.mssqltips.com/sqlserverauthor/32/michelle-gutzait/
Lisäykseni on Michellen ratkaisuun muutos schema tiedon lisäämiseksi luotaviin tauluihin. Tällä tosin on merkistystä lähinnä SQL servereiden välillä tehtävästä siirrosta tai muiden kantojen välillä, jos halutaan määrittää schemat sql server puolella.
Ongelma joka pitäisi vielä ratkaista, on XML datan tuki tai kunnollinen virheenkorjaus, joka ohittaa mm. XML kentän kohdalla tulevan virheen ja raportoi siitä – ja jatkaa…
Linkatun Serverin tekeminen SQL servereiden välillä
AP1 koneen SQL server default instanssin Linked Server AP2 Adventure Works kantaan.
SQL servereiden välillä konfigurointi on todella suoraviivaista. Labraympäristössä voidaan vielä käyttää admin tunnuksia, joten security välilehden tunnus asetuksiinkaan eitarvitse koskea. Oikeassa ympäristössä security on yleensä asetettava tietylle user accountille.
Skripti
USE [master]
GO
/****** Object: LinkedServer [AP2] Script Date: 6.11.2012 9:58:25 ******/
EXEC master.dbo.sp_addlinkedserver @server = N’AP2′, @srvproduct=N’SQL Server’
/* For security reasons the linked server remote logins password is changed with ######## */
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N’AP2′,@useself=N’True’,@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
GO
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’collation compatible’, @optvalue=N’false’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’data access’, @optvalue=N’true’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’dist’, @optvalue=N’false’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’pub’, @optvalue=N’false’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’rpc’, @optvalue=N’true’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’rpc out’, @optvalue=N’true’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’sub’, @optvalue=N’false’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’connect timeout’, @optvalue=N’0′
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’collation name’, @optvalue=null
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’lazy schema validation’, @optvalue=N’false’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’query timeout’, @optvalue=N’0′
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’use remote collation’, @optvalue=N’true’
EXEC master.dbo.sp_serveroption @server=N’AP2′, @optname=N’remote proc transaction promotion’, @optvalue=N’true’
GO
Siirtologiikka
Ensin on luotava taulu johon lähdekannan kaikki taulunimet tuodaan. SQL skripti luuppaa taulunimiä tästä taulusta ja luo ja täyttää taulut haluttuun scheemaan kohdekannassa. Tauluista tulee identtiset lähteen kanssa.
Aputaulun luonti
CREATE TABLE [dbo].[tblListOfTables](
[TableName] [varchar](200) NOT NULL,
[TableSchema] [varchar](200) NOT NULL,
[IsEnabled] [bit] NULL,
PRIMARY KEY CLUSTERED
(
[TableName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
ALTER TABLE [dbo].[tblListOfTables] ADD DEFAULT ((1)) FOR [IsEnabled]
GO
Näppärin tapa siirtää data, on ajaa seuraava kysely linkatussa kyselyssä ja ottaa SQL Server management studiosta copy / pastella data talteen.
SQL Kysely:
SELECT TABLE_SCHEMA, TABLE_NAME FROM ap2.AdventureWorks.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME IN ( SELECT TABLE_NAME FROM ap2.AdventureWorks.INFORMATION_SCHEMA.COLUMNS)
Tulos:
Kohdetaulu:
muuta editoitavat 200 sellaiseksi että varmasti riittää esim: 2000 a pista tarpeeton enabled kenttä kyselystä.
SELECT TOP (200) TableName, TableSchema, IsEnabled
FROM tblListOfTables
Aja kysely uudelleen:
Liitä data:
Huomioi, että kenttäjärjestys tulee olla sama lähteessä ja kohteessa!
toimii muuten, mutta virheenkorjauksen vuoksi siirto loppuu ekaan XML datakenttään. Tämän voi korjata SQL skriptissä.
Ja itse SQL skripti on tässä:
Tarvittavat muuttujat:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DECLARE @Loop INT,
@cmd VARCHAR(MAX),
@rc INT,
@TB VARCHAR(130),
@SN VARCHAR(130)
Temppi taulu ja siihen juokseva numerointi kenttä luuppia varten:
SELECT ROWID = IDENTITY(INT,1,1), TableName, TableSchema
INTO #Tables
FROM tblListOfTables
WHERE IsEnabled = 1
ORDER BY TableName
Loopin initialisointi:
SET @rc = @@ROWCOUNT
SET @Loop = 1
— Looping on table names, dropping and recreating each:
WHILE @Loop <= @rc
BEGIN
SELECT @TB = TableName, @SN = TableSchema FROM #Tables WHERE ROWID = @Loop
SET @cmd = ”
Datan ja taulujen ‘siirto’:
SELECT @cmd = ’IF EXISTS (SELECT 1 FROM sys.objects WHERE Type = ”U”’ +
’AND name = ”’ + @TB + ”’) DROP TABLE [’ + @TB + ’];’ +
’SELECT * INTO [’ + @TB + ’] ’ +
’FROM AP2.[AdventureWorks].[’+ @SN +’].[’ + @TB + ’]’
EXEC (@cmd)
SET @Loop = @Loop + 1
END
Temppi taulun poisto:
DROP TABLE #Tables
GO