<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Oracle backend</TITLE ><META NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK REL="HOME" TITLE="PowerDNS manual" HREF="index.html"><LINK REL="UP" TITLE="Backends in detail" HREF="backends-detail.html"><LINK REL="PREVIOUS" TITLE="Generic MySQL and PgSQL backends" HREF="generic-mypgsql-backends.html"><LINK REL="NEXT" TITLE="Generic SQLite backend (2 and 3)" HREF="gsqlite.html"></HEAD ><BODY CLASS="SECT1" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#840084" ALINK="#0000FF" ><DIV CLASS="NAVHEADER" ><TABLE SUMMARY="Header navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TH COLSPAN="3" ALIGN="center" >PowerDNS manual</TH ></TR ><TR ><TD WIDTH="10%" ALIGN="left" VALIGN="bottom" ><A HREF="generic-mypgsql-backends.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" >Appendix A. Backends in detail</TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="gsqlite.html" ACCESSKEY="N" >Next</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="SECT1" ><H1 CLASS="SECT1" ><A NAME="ORACLE" >A.6. Oracle backend</A ></H1 ><P > <DIV CLASS="TABLE" ><A NAME="AEN5033" ></A ><P ><B >Table A-6. Oracle backend capabilities</B ></P ><TABLE BORDER="1" CLASS="CALSTABLE" ><COL><COL><TBODY ><TR ><TD >Native</TD ><TD >Yes</TD ></TR ><TR ><TD >Master</TD ><TD >No</TD ></TR ><TR ><TD >Slave</TD ><TD >No</TD ></TR ><TR ><TD >Superslave</TD ><TD >No</TD ></TR ><TR ><TD >Autoserial</TD ><TD >Yes</TD ></TR ><TR ><TD >Module name</TD ><TD >oracle</TD ></TR ><TR ><TD >Launch name</TD ><TD >oracle</TD ></TR ></TBODY ></TABLE ></DIV > </P ><P > Oracle backend with easily configurable SQL statements, allowing you to graft PDNS on any Oracle database of your choosing. </P ><P > PowerDNS is currently ascertaining if this backend can be distributed in binary form without violating Oracle licensing. In the meantime, the source code to the Oracle backend is available in the pdns distribution. </P ><P > The following configuration settings are available: </P ><P > <P ></P ><DIV CLASS="VARIABLELIST" ><DL ><DT >oracle-debug-queries</DT ><DD ><P > Output all queries to disk for debugging purposes. </P ></DD ><DT >oracle-time-queries</DT ><DD ><P > Output all queries to disk for timing purposes. </P ></DD ><DT >oracle-uppercase-database</DT ><DD ><P > Change all domain names to uppercase before querying database. </P ></DD ><DT >oracle-database</DT ><DD ><P > Oracle database name to connect to. </P ></DD ><DT >oracle-home</DT ><DD ><P > PDNS can set the ORACLE_HOME environment variable from within the executable, allowing execution of the daemon from init.d scripts where ORACLE_HOME may not yet be set. </P ></DD ><DT >oracle-sid</DT ><DD ><P > PDNS can set the ORACLE_SID environment variable from within the executable, allowing execution of the daemon from init.d scripts where ORACLE_SID may not yet be set. </P ></DD ><DT >oracle-username</DT ><DD ><P > Oracle username to connect as. </P ></DD ><DT >oracle-password</DT ><DD ><P > Oracle password to connect with. </P ></DD ></DL ></DIV > </P ><P > The generic Oracle backend can be configured to use user-specified queries. The following are the default queries and their names: </P ><P > <P ></P ><DIV CLASS="VARIABLELIST" ><DL ><DT >oracle-forward-query</DT ><DD ><P > select content, TimeToLive, Priority, type, ZoneId, nvl(ChangeDate,0) from Records where name = :name and type = :type </P ></DD ><DT >oracle-forward-query-by-zone</DT ><DD ><P > select content, TimeToLive, Priority, type, ZoneId, nvl(ChangeDate,0) from records where name = :name and type = :type and ZoneId = :id </P ></DD ><DT >oracle-forward-any-query</DT ><DD ><P > select content, TimeToLive, Priority, type, ZoneId, nvl(ChangeDate,0) from records where name = :name </P ></DD ><DT >oracle-list-query</DT ><DD ><P > select content, TimeToLive, Priority, type, ZoneId, nvl(ChangeDate, 0), name from records where ZoneId = :id </P ></DD ></DL ></DIV > </P ><DIV CLASS="SECT2" ><H2 CLASS="SECT2" ><A NAME="AEN5114" >A.6.1. Setting up Oracle for use with PowerDNS</A ></H2 ><P > To setup a database that corresponds to these default queries, issue the following as Oracle user sys: <PRE CLASS="SCREEN" > create user powerdns identified by YOURPASSWORD; grant connect to powerdns; create tablespace powerdns datafile '/opt/oracle/oradata/oracle/powerdns.dbf' size 256M extent management local autoallocate; alter user powerdns quota unlimited on powerdns; </PRE > </P ><P > As user 'powerdns' continue with: <PRE CLASS="SCREEN" >create table Domains ( ID number(11) NOT NULL, NAME VARCHAR(255) NOT NULL, MASTER VARCHAR(128) DEFAULT NULL, LAST_CHECK INT DEFAULT NULL, TYPE VARCHAR(6) NOT NULL, NOTIFIED_SERIAL INT DEFAULT NULL, ACCOUNT VARCHAR(40) DEFAULT NULL, primary key (ID) )tablespace POWERDNS; create index DOMAINS$NAME on Domains (NAME) tablespace POWERDNS; create sequence DOMAINS_ID_SEQUENCE; create table Records ( ID number(11) NOT NULL, ZoneID number(11) default NULL REFERENCES Domains(ID) ON DELETE CASCADE, NAME varchar2(255) default NULL, TYPE varchar2(6) default NULL, CONTENT varchar2(255) default NULL, TimeToLive number(11) default NULL, Priority number(11) default NULL, CreateDate number(11) default NULL, ChangeDate number(11) default NULL, primary key (ID) )tablespace POWERDNS; create index RECORDS$NAME on RECORDS (NAME) tablespace POWERDNS; create sequence RECORDS_ID_SEQUENCE; </PRE > </P ><P > To insert records, either use <B CLASS="COMMAND" >zone2sql</B > with the <B CLASS="COMMAND" >--oracle</B > setting, or execute sql along the lines of: <PRE CLASS="SCREEN" >insert into domains (id,name,type) values (domains_id_sequence.nextval,'netherlabs.nl','NATIVE'); insert into Records (id,ZoneId, name,type,content,TimeToLive,Priority) select RECORDS_ID_SEQUENCE.nextval,id ,'netherlabs.nl', 'SOA', 'ahu.casema.net. hostmaster.ds9a.nl. 2000081401 28800 7200 604800 86400', 3600, 0 from Domains where name='netherlabs.nl'; insert into Records (id,ZoneId, name,type,content,TimeToLive,Priority) select RECORDS_ID_SEQUENCE.nextval,id ,'netherlabs.nl', 'NS', 'ahu.casema.net', 3600, 0 from Domains where name='netherlabs.nl'; insert into Records (id,ZoneId, name,type,content,TimeToLive,Priority) select RECORDS_ID_SEQUENCE.nextval,id ,'netherlabs.nl', 'NS', 'ns1.pine.nl', 3600, 0 from Domains where name='netherlabs.nl'; insert into Records (id,ZoneId, name,type,content,TimeToLive,Priority) select RECORDS_ID_SEQUENCE.nextval,id ,'netherlabs.nl', 'NS', 'ns2.pine.nl', 3600, 0 from Domains where name='netherlabs.nl'; insert into Records (id,ZoneId, name,type,content,TimeToLive,Priority) select RECORDS_ID_SEQUENCE.nextval,id ,'netherlabs.nl', 'A', '213.244.168.210', 3600, 0 from Domains where name='netherlabs.nl'; insert into Records (id,ZoneId, name,type,content,TimeToLive,Priority) select RECORDS_ID_SEQUENCE.nextval,id ,'netherlabs.nl', 'MX', 'outpost.ds9a.nl', 3600, 10 from Domains where name='netherlabs.nl'; </PRE > </P ><P > For performance reasons it is best to specify <B CLASS="COMMAND" >--transactions</B > too! </P ></DIV ></DIV ><DIV CLASS="NAVFOOTER" ><HR ALIGN="LEFT" WIDTH="100%"><TABLE SUMMARY="Footer navigation table" WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" ><A HREF="generic-mypgsql-backends.html" ACCESSKEY="P" >Prev</A ></TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="index.html" ACCESSKEY="H" >Home</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" ><A HREF="gsqlite.html" ACCESSKEY="N" >Next</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Generic MySQL and PgSQL backends</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="backends-detail.html" ACCESSKEY="U" >Up</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Generic SQLite backend (2 and 3)</TD ></TR ></TABLE ></DIV ></BODY ></HTML >