ODBC made easy på dansk (når bare man ved hvordan) Jesper Michelsen, Data warehouse & Analyse
Agenda Præsentation Hvad er ODBC? ODBC Datakildeadministrator System-DSN Distribution Fil-DSN Scriptede connections Nyttige makroer Tuning og optimering Afrunding
Præsentation Jesper Michelsen cand.polit. (ikke praktiserende) PensionDanmark A/S Data warehouse-specialist, Data warehouse & Analyse Business Intelligence, Data warehouse, Databaser, Analyser Godt 20 års erfaring med SAS 5.09, 5.18, 6.06, 6.12, 8.2, 9.2 z/os, AIX, Sun/Unix, Windows, OS/2, Digital VMS PensionDanmark A/S Arbejdmarkedspensionsselskab Ejet af arbejdsmarkedets parter 600.000 medlemmer Balance ca. 105 mia. kr. (2010) MS SQL Server hus Analytic frontend; SAS, Excel og MS SQL Server Management Studio 3
Agenda Præsentation Hvad er ODBC? ODBC Datakildeadministrator System-DSN Distribution Fil-DSN Scriptede connections Nyttige makroer Tuning og optimering Afrunding
Hvad er ODBC? Open Data Base Connectivity et standard-middlelayer API til brug for at læse og skrive data fra en datakilde Udviklet af SQL Access Group i 1992 Ikke knyttet op på et bestemt programmeringssprog, database eller operativsystem Næsten alle DBMS understøtter OBDC; også flade filer og regneark Sybase understøtter ikke (du skal købe en 3. parts driver) 5
Hvad er ODBC? ODBC er et mellemlag skudt ind mellem applikation og database Kan sammenlignes lidt med en printer-driver oversætter sæt af kommandoer til noget enheden kan forstå og returnere på Programmøren skal derfor i princippet ikke tage stilling til evt. ændringer i applikationen, når databasen skiftes ud til en anden version eller et andet produkt driveren håndterer trafikken vha. et sæt keywords samt en SQL query 6
Agenda Præsentation Hvad er ODBC? ODBC Datakildeadministrator System-DSN Distribution Fil-DSN Scriptede connections Nyttige makroer Tuning og optimering Afrunding
ODBC Datakildeadministrator System-DSN 8
ODBC Datakildeadministrator System-DSN 9
ODBC Datakildeadministrator System-DSN 10
ODBC Datakildeadministrator System-DSN 11
ODBC Datakildeadministrator Eksempel på brug af System-DSN PROC SQL; connect to odbc(datasrc= ODBC kilde UID=sasdbo PWD=Toscana08); create table a as select * from connection to odbc(.. QUIT; disconnect from odbc; Libname data odbc datasrc= ODBC kilde UID=sasdbo PWD=Toscana08 schema=dbo; 12
Agenda Præsentation Hvad er ODBC? ODBC Datakildeadministrator System-DSN Distribution Fil-DSN Scriptede connections Nyttige makroer Tuning og optimering Afrunding
ODBC Datakildeadministrator Distribution af System-DSN System-DSN findes i Windows-registreringsdatabase Eksport af DB entry Import af DB entry Kræver rettigheder som (lokal)administrator Besværligt, når IT giver serverne nye navne du får en ny maskine Inden man får set sig om, kan man have et hav af registreringer 14
ODBC Datakildeadministrator Distribution af System-DSN Hvor gemmer ODBC sig i Registreringsdatabasen? 15
ODBC Datakildeadministrator Distribution af System-DSN Så langt så godt Det er ikke svært Enkelt, når man bare er sig selv Man skal dog være administrator for at oprette og vedligeholde en datakilde Men er man flere om at dele Synkront på alle arbejdsstationer Hvordan synkroniserer man ændringer fra flere brugere? Jeg har ikke noget svar Et eller andet versioneringsprogram aht. revisionsspor og fallback Aftaler og metode i gruppen Bede IT om at håndtere det I strid med IT-politikken? Lad os prøve noget andet! 16
Agenda Præsentation Hvad er ODBC? ODBC Datakildeadministrator System-DSN Distribution Fil-DSN Scriptede connections Nyttige makroer Tuning og optimering Afrunding
ODBC Datakildeadministrator Fil-DSN 18
ODBC Datakildeadministrator Fil-DSN 19
ODBC Datakildeadministrator Fil-DSN Hvad indeholder.dsn-filen angivelse af driver brugerident (UID) arbejdsstation-id (WSID) navn på operativsystem SQL Server Men ikke noget password! Det er der råd for Vi skal have fat i nogle keywords 20
ODBC Datakildeadministrator Fil-DSN Der skal rettes i.dsn-filen Tilføj keyword PWD=<password> 21
ODBC Datakildeadministrator Eksempel på brug af Fil-DSN proc sql; connect to ODBC(NOPROMPT= c:\odbc\odbc filkilde.dsn ); create table a as select * from connection to odbc(.. disconnect from odbc; quit; libname data2 odbc NOPROMPT="filedsn=c:\ODBC\ODBC filkilde.dsn" schema=dbo ; 22
Klip fra manualen LIBNAME statement specifics for ODBC DATASRC=<'>ODBC-data-source<'> specifies the ODBC data source to which you want to connect. For PC platforms, data sources must be configured by using the ODBC icon in the Windows Control Panel. DSN= is an alias for this option that indicates that the connection is attempted using the ODBC SQLConnect API, which requires a data source name. You can also use a user ID and password with DSN=. If you want to use an ODBC file DSN, then instead of supplying DATASRC=<'>ODBC-data-source<'>, use the PROMPT= or NOPROMPT= option followed by "filedsn=(name-of-your-file-dsn);". For example: libname mydblib odbc noprompt="filedsn=d:\share\msafiledsn.dsn;"; NOPROMPT=<'>ODBC-connection-options<'> specifies connection options for your data source or database. Separate multiple options with a semicolon. If you do not specify enough correct connection options, an error is returned. No dialog box displays to help you complete the connection string. (r.t.f.m.s) 23
Agenda Præsentation Hvad er ODBC? ODBC Datakildeadministrator System-DSN Distribution Fil-DSN Scriptede connections Nyttige makroer Tuning og optimering Afrunding
Scriptede connections Hvad er en scripted connection? I stedet for at bruge et System-DSN eller et File-DSN Skriver de nødvendige connection-keywords selv Pakker det ind i NOPROMPT-optionen Nødvendige keywords UID SERVER PWD DRIVER DATABASE og evt. TRUSTED_CONNECTION Og vi ved jo det meste fra File-DSN 25
Scriptede connections Libname data ODBC NOPROMPT= DRIVER=SQL Server; UID=sasdbo; DATABASE=ODBCtest; PWD=Toscana08; SERVER=Laptop-jmi2\SQLEXPRESS schema=dbo; Nu kan vi gøre det fleksibelt 26
Agenda Præsentation Hvad er ODBC? ODBC Datakildeadministrator System-DSN Distribution Fil-DSN Scriptede connections Nyttige makroer Tuning og optimering Afrunding
En makro %macro librefodbctest(_srv=laptop-jmi2\sqlexpress, _db=odbctest); Libname data ODBC NOPROMPT= DRIVER=SQL Server; UID=sasdbo; DATABASE=&_db.; PWD=Toscana08; SERVER=&_srv. schema=dbo; %mend librefodbctest; Puha den indeholder jo både hardcoded brugernavn og password! 28
En anden makro NU skal vi bruge keyword et TRUSTED_CONNECTION %macro librefodbctest(_srv=laptop-jmi2\sqlexpress, _db=odbctest); Libname data ODBC NOPROMPT= DRIVER=SQL Server; UID=&sysuserid.; DATABASE=&_db.; TRUSTED_CONNECTION=yes; SERVER=&_srv. schema=dbo; %mend librefodbctest; Vupti vi har overladt sikkerheden til Windows Active Directory Husk lige at tildele rettigheder til AD-brugeren på databasen Opret en gruppe i AD 29
En tredje makro %macro noprompt (_srv=laptop-jmi2\sqlexpress, _db=odbctest); noprompt="driver=sql Server; UID=&sysuserid; DATABASE=&_db; Trusted_Connection=Yes; SERVER=&_srv. (Nej, der mangler ikke et ; ) %mend noprompt; libname data ODBC %noprompt schema=dbo ; (Dér kom ; ) 30
En fjerde makro Samme kan laves til brug i PROC SQL %macro SQLconnect2ODBCtest(_srv=LAPTOP-JMI2\SQLEXPRESS, _db=odbctest); connect to ODBC(noprompt="DRIVER=SQL Server; UID=&sysuserid.; DATABASE=&_db.; Trusted_Connection=Yes; SERVER=&_srv."); %mend SQLconnect2ODBCtest; proc sql; %SQLconnect2ODBCtest;. disconnect from ODBC; quit; 31
Agenda Præsentation Hvad er ODBC? ODBC Datakildeadministrator System-DSN Distribution Fil-DSN Scriptede connections Nyttige makroer Tuning og optimering Afrunding
Tuning og optimering Skrive data Skrive mange data til en database via et libname DBCOMMIT=n Låser rækker til tabel for hver n te række BULKLOAD=yes no Indsætter data som en bunke (Kun MS SQL Server, kun på Windows) Bør bruges sammen Den ideelle størrelse af DBCOMMIT afhænger af antal byte pr. række, og hvor stor serverens insert-buffer er prøv dig frem Er den for lille, bruges for megen tid på commit Er den for stor, har den ingen effekt 33
Tuning og optimering Læse fra DBMS-tabeller Dataset options I forbindelse med joins DBKEY= <kolonne> Danner en WHERE-klausul med formen WHERE <kolonne> = kolonne-værdi indeholder hver værdi i kontroldatasættet DBNULLKEYS= yes no Bruges i forbindelse med DBKEY Udvider ovenstående WHERE, så der tages højde for, at der kan forekomme NULLs i nøglen angivet i DBKEY DBINDEX= yes no Instruktion til SAS om at benytte evt. index på tabellen 34
Tuning og optimering Eksempel på join create table samlet as select * from sasdata.small as l left join odbclib.master_bred(dbindex=yes dbkey=id dbnullkeys=yes) as m on(l.id = m.id); 35
Tuning og optimering Følg med i dine SQL er Options SASTRACE=,,,d Giver dig og din DBA er information om, hvordan din SAS-query over mod din database ser ud SASTRACELOC=saslog Sørger for, at informationen kommer ud i SASLOG Derudover Tjek din hardware Først og fremmest drop SAN, brug DAS Brug indeks og vedligehold dem Partitionér dine store tabeller Fedt for din DBA (de elsker det) 36
Spørgsmål? 37
Kilder og kontakt Wikipedia Open Database Connectivity (pr. 7. januar 2011) Microsoft MSDN Library Using ODBC with Microsoft SQL Server Amrish Kumar & Alan Brewer, 1997 (2010) Using Connection String Keywords with SQL Server Native Client SQL Server 2008 R2 SAS Institute SAS/ACCESS 9.2 for Relational Databases, Reference (4th ed.) SAS/ACCESS Interface to ODBC Kontakt inden 31. juli jmi@pension.dk fra 1. august Nykredit, Risikomodeludvikling 38