Terug naar de beginpaginaCentor Homepage

Een 'wondermiddel' voor (bijna?) elke Oracle-specialist


TOAD: gratis te downloaden

In de vorige Orakels hebben tips gestaan die in de dagelijkse praktijk goed bruikbaar bleken. Bij een aantal van die tips dacht ik echter: 'Dat kan met TOAD toch net zo handig opgelost worden?'.
Het is nu zo'n drie jaar geleden dat ik door een toenmalig collega attent werd gemaakt op 'een heel handige gratis tool'. Ik heb dat tool toen gedownload en ben het gaan gebruiken. Ik denk dat er sinds die dag weinig werkdagen zijn voorbijgegaan waarop ik TOAD niet gebruikte... Reden voor mij u deelgenoot te maken van TOAD.

Door Ruben Spekle (Ruben@spekle.com)

TOAD is gemaakt door een applicatieprogrammeur die zelf een 'tool'-tje gebouwd had voor een aantal van zijn standaard bezigheden. Hij heeft dit tool toen aan collega's en vrienden laten zien, die al snel enthousiast werden over de mogelijkheden in het gebruik. Snel daarna begonnen ook de suggesties voor verbeteringen te komen. Toen hij na een aantal maanden een acceptabel tool had heeft hij het op het net gezet. TOAD was gratis te downloaden en bijna dagelijks kwamen er nieuwe releases uit.

Al snel ontstond er een enthousiaste gebruikersgroep die kritisch naar TOAD keek en regelmatig met wijzigingen en bug-meldingen kwam. De geestelijk vader van TOAD, op het net 'TOADman' genoemd, probeerde zoveel mogelijk wijzigingen en oplossingen te maken en te verspreiden. Dit werd een steeds moeilijker klus en op den duur bijna onmogelijk. Wat velen vreesden werd waar: TOAD werd opgeslokt door 'het grote geld'. Gelukkig werd ook de 'TOADman' in dienst genomen en bleef er elke maand een beperkte - maar toch nog steeds gratis - versie van TOAD op het net verschijnen. TOAD werd stabieler en vooralsnog heeft de commercie TOAD geen kwaad gedaan.

TOAD heeft veel facetten en kan ontzettend veel. Meer dan in een artikel verteld kan worden. Ik hoop echter met een opsomming van de mogelijkheden de mensen die TOAD niet kennen (zijn die er nog?) enthousiast te maken. Wellicht ook dat mensen die allang met TOAD werken dingen van mij horen die ze nog niet waren tegengekomen.
De TOAD-gebruiker die vindt dat ik belangrijke TOAD-features vergeet, nodig ik bij deze uit via de OCCentor-mailinglist of een nieuw artikel in Het Orakel zijn of haar feature(s) te openbaren.

Lijst van instances/databases
Bij het inloggen geeft TOAD een lijst van instances/databases die gekozen kunnen worden. Hij onthoudt vorige inlognamen en uit die lijst kan dus worden snelgekozen. TOAD onthoudt ook wachtwoorden, maar alleen als zo'n wachtwoord gelijk is aan de inlognaam (het is echter mogelijk om TOAD zo in te stellen dat deze ook de wachtwoorden onthoudt). Door het bestand TOAD2.ini te bewaren is het mogelijk bij een update deze inlognamen opnieuw te gebruiken. Een update van TOAD omvat namelijk het downloaden van de totale programmatuur. En dat veroorzaakt dat alles weer in 'nieuwstaat' is. Het kopiëren van de oude TOAD2.ini zorgt er echter voor dat de 'oude' inlognamen weer gekozen kunnen worden.

Het is overigens mogelijk binnen TOAD meerdere sessies actief te hebben. Door het aanroepen van een nieuwe sessie kan voor een bepaald window de actieve sessie worden veranderd. Een erg handige optie als je bepaalde queries vaker wilt doen in meerdere schema's of databases. Let echter wel op dat je de juiste schema's voor je hebt als je gaat wijzigen... Het is mij namelijk al menig keer gebeurd dat ik in een verkeerd schema een en ander uitvoerde..!

Editor en resultaatscherm
Het sql window van TOAD bestaat uit een editor waar sql commando's kunnen worden ingetypt en een resultaatscherm waar het resultaat van de commando wordt geplaatst. Een voorbeeld daarvan vindt u in de bovenstaande afbeelding.
Het is nu mogelijk het resultaat uit te printen (waarbij een aantal koppen en voetteksten kunnen worden geplaatst), of het resultaat te bewaren (komma gescheiden of tab gescheiden). Als niet alle kolommen in het resultaat gewenst zijn, kunt met een rechter muistoets en select columns de gewenste kolommen worden geselecteerd (alleen in de commerciële versie). Het is natuurlijk ook mogelijk deze kolommen in het select statement op te nemen. Om echter typewerk te besparen kan de tabel (de tekst emp in het voorbeeld) worden geselecteerd en vervolgens rechtermuistoets of f10 en dan describe. Het scherm - zoals te zien in de figuur op de volgende pagina - wordt getoond.
Door te dubbelklikken op de kolomnamen of via drag en drop kunnen de namen worden geselecteerd. Verder worden in dit scherm alle eigenschappen van de tabel weergegeven: columns, indices, constraints, triggers, data (de inhoud van de tabel kan eventueel met een filter worden verfijnd, maar ook kan de inhoud worden gemuteerd), scripts en andere zaken. In scripts staat de ddl die gebruikt moet worden om de tabel aan te maken. Ook handig is het laatste tabblad referential dat aangeeft door welke andere objecten de tabel gebruikt wordt en aan welke andere objecten de tabel refereert. Handig bij een impact analyse. Een handige optie hier is ook het tweede icoontje bovenin het scherm wat de mogelijkheid geeft om de inhoud van de tabel te exporteren. Hierbij maakt TOAD dan insert scripts aan van alle (of een selectie van) rijen in de tabel.
Terug in het sql window nog een aantal opties: Als je een letter intypt van de tabel die je wenst en drukt op , biedt TOAD een venster met tabellen waaruit je kunt kiezen.
Als je de naam van een package intypt, gevolgd door een punt en even wacht, geeft TOAD de mogelijke procedures of functies van die package die je kunt kiezen.

De boekjes-icoon linksboven het resultaatblok, geeft een single row view van het resultaat. Door middel van F8 of sql-window, command recall is het mogelijk oude statements op te halen en weer uit te voeren. Door in te geven edit (of select rowid,t.* from <table> t) kan de tabel worden gemuteerd. In de statusbalk onderaan het scherm wordt het rode blokje nu groen. Als de plan-table is aangemaakt, is het mogelijk (door ingeven van control-e) om een explain plan van een statement te krijgen. Als je een bepaald statement toch in sql-plus wilt laten uitvoeren typ je deze in de editor in en kies je: SQL-window,execute sql-window via SQL-PLUS in het menu. SQL-PLUS wordt opgestart en na het ingeven van R en return wordt jouw query uitgevoerd. Tot zover het sql-window.

TOAD heeft ook een sql-builder die de mogelijkheid geeft via een grafische weergave een query, update of insert te bouwen. Echter de commerciële sql-builder is anders dan de freeTOAD sql-builder. Als je jezelf de tijd gunt om de mogelijkheden van deze builder te doorgronden zijn vrij simpele en snelle queries te bouwen. In ieder geval gebruik ik de sql-builder om snel een insert statement of update statement te maken van een tabel.

Overzicht van alle objecten
In het schema browser is het mogelijk een overzicht te krijgen van alle objecten in een schema: tabellen, views, procedures, functies, packages, triggers enzovoort. Van al die objecten kunnen opties worden gekozen of eigenschappen worden aangepast.

De opties die kunnen worden gekozen bij een tabel zijn dezelfde die ook in het scherm stonden van een describe van een tabel (zie hiervoor). Soortgelijke opties zijn er voor een view. Daar echter is het select statement te zien waarop de view gebaseerd is. Met één klik is het mogelijk de definitie van dat script te laden in een sql-window zodat deze eventueel kan worden aangepast.

Het is in de schema-browser op diverse plaatsen (objects, data) mogelijk een filter te plaatsten. Dit is op zich een handige optie, maar realiseer wel dat filters blijven bestaan, ook als je uitgelogd en weer ingelogd bent. Ik heb al een aantal ontwikkelaars verdwaasd zien zoeken naar hun verdwenen objecten of rijen die uiteindelijk alleen uitgefilterd waren..!

In het sequence window is de laatst afgegeven waarde van een sequence te vinden. Dit heeft mij menig maal geholpen om te verklaren waarom inserts fout gingen nadat een lading data was geladen die buiten de sequence om waren gegaan. Even snel een nieuwe sequence maken kan met het create new sequence icoontje. Dit icoontje komt bij alle objecten voor en geeft een makkelijke interface naar het maken van een nieuw object.

Het tabblad voor constraints is een tabblad die ik niet vaak gebruik daar deze constraints bij de tabel ook worden opgesomd en ik ze meestal in deze context gebruik. Let overigens hierop: standaard staat het filter op het niet tonen van check constraints en referential constraints! Het is door het aanklikken van een icoontje mogelijk om constraints te enablen en te disablen.

Het triggers-tabblad geeft alle triggers die binnen het schema bestaan. Het is hier mogelijk triggers te disablen en enablen alsmede te compileren. Ik gebruik dit tabblad als ik triggers aan het maken ben en ik compilatiefouten krijg. Ik zoek in het trigger-tabblad de betreffende trigger op en open deze in de procedure editor. Als ik daar de trigger compileer krijg ik de fout en gaat de cursor staan op de plek waar de fout optrad.

Het procedure-tabblad
Het procedure-tabblad werkt ongeveer hetzelfde. Hier is een onderverdeling gemaakt in functies, procedures en packages. Bij packages is het mogelijk de package uit te klappen en de public procedures en functies te zien van deze package. Aanklikken van zo'n procedure of functie laat de cursor springen naar de plek in de code waar deze procedure of functie zich in de code bevindt. Het is altijd mogelijk de code van een object te openen in de procedure Procedure edit window, om de code aan te passen of te debuggen.

Bij procedures en functies geeft de procedure window een script met create or replace function/procedure en de code die er bij hoort. Bij een package wordt hetzelfde scherm geopend maar met een boomstructuur er naast van de package. Klikken op een bepaalde procedure/functie in deze boom laat de cursor springen naar de juiste plek binnen de code.

Voor het debuggen van een object is de procedure-edit window handig omdat deze met de cursor gaat staan op plaatsen waar een fout optreedt, zodat je meteen weet waar je de fout moet gaan zoeken. De code wordt met kleuren leesbaarder gemaakt, wat bij het intypen van codes helpt om te zien of je code correct is. Als je declare intypt blijft de code zwart; bij het intypen van de laatste e wordt de code blauw. Commentaartekst wordt groen gemaakt wat je helpt als je teveel code uitgecommentarieerd hebt.

Debug-statements
Als je een blok tekst selecteert is het mogelijk deze in één keer tot commentaar te verwerken of het blok te laten verspringen. Als je het begin selecteert van een structuur (begin, if, loop), is het mogelijk het eind van die structuur te laten vinden; best handig als je door de bomen het bos niet meer kunt zien. Een optie die ik ook veel gebruik is de mogelijkheid tot het maken van debug-statements met behulp van dbms_output. Als je een parameter selecteert en de rechtermuistoets indrukt (of f10) krijg je de optie make output statement. Deze maakt bijvoorbeeld de volgende statement aan:
DBMS_OUTPUT.PUT_LINE ( 'l_msg_code_length= ' || l_msg_code_length );
welke je door pasten op de gewenste plaats in de code kunt zetten. Het is ook mogelijk lege boodschappen te laten maken om snel eigen commentaar te kunnen invoegen.

Voor het ontvangen van de server messages heeft TOAD een dbmsoutput window die binnen een bepaalde sessie alle messages opvangt. Op die wijze is op snelle manier de code van messages te voorzien, deze uit te voeren en de boodschappen in de message-window te volgen.

Nog meer mogelijkheden
Er zitten nog veel meer mogelijkheden in TOAD dan tot nu toe zijn behandeld. Er zijn bijvoorbeeld schermen waarin sessies kunnen worden gevolgd, database parameters kunnen worden bekeken enzovoort. Het ontdekken van de mogelijkheden is vooral proberen en zoeken omdat de documentatie van TOAD wel te wensen overlaat.
Ik hoop dat ik in vogelvlucht het gemak van TOAD heb kunnen aantonen. Ik zelf werk er, zoals gezegd, dagelijks mee en vind nog regelmatig nieuwe features die het leven nóg aangenamer maken. TOAD is gratis te downloaden via http://www.quest.com/ free_software/ , waar ook een eventuele commerciële versie is te bestellen.