This action might not be possible to undo. Are you sure you want to continue?
7 DBA Skills for Highly Effective Developers
Presented by: Karen Morton Morton Consulting
There is often a great divide between the Oracle DBA and Developers. Bridging this gap can often mean the difference between an efficient, well-received application and a bomb! This paper discusses skills that are common to DBAs but often left out of the developer’s repertoire. While it is not necessary for the developer to learn all the tricks of the DBAs trade, a basic understanding of these seven concepts will dramatically enhance the ability of the developer to design and write better applications.
Morton Consulting - April 2002
7 DBA Skills for Highly Effective Developers
“He that is good with a hammer tends to think everything is a nail.” - Abraham Maslow
Morton Consulting - April 2002
7 DBA Skills for Highly Effective Developers
Who Does What?
• Database Administrator
– Systems and performance
Who does what when it comes to your Oracle database? In most organizations, one set of distinct duties falls to the database administrator and another set falls to the developer. Typically, the DBA is concerned with the “black box” of Oracle: how it is installed, configured, and maintained for most efficient operation. The developer, on the other hand, is usually focused on the development of applications that will use the Oracle database. While this division of duties is natural and necessary, it can also create a divide between the DBA and developer. The developer typically relies heavily on the DBA to create objects and provide permissions for their applications. So, what happens when the developer needs something “now” and the DBA has other pressing tasks that take priority? What happens when the developer writes code that degrades system performance and the DBA has to figure out where the problem is and fix it? Have you ever found yourself saying “just add more RAM” when the DBA tells you your query is taking up too much memory?
Morton Consulting - April 2002
April 2002 4 .7 DBA Skills for Highly Effective Developers The DBA • System performance • Backup & recovery • Security / access permissions • Object creation 4 Morton Consulting .
7 DBA Skills for Highly Effective Developers The Developer • • • • User interface Data acquisition Reporting End user support 5 Morton Consulting .April 2002 5 .
DBAs and developers are often pitted against each other.April 2002 6 . when performance issues arise. the DBA points the finger at the developer and vice-versa. Many times. what else matters?! 6 Particularly when it comes to application performance. In other words. it’s the job of the DBA to keep it running smoothly and efficiently. So. once an application is launched and it looks good and provides the user with an interface they like and that does the job. Management typically expects DBAs to be responsible for how the system runs and developers to be responsible for what it runs. how do we stop the finger-pointing and really work as a team? Morton Consulting .7 DBA Skills for Highly Effective Developers Team Work Does he think I’m dumb?! Developer DBA What were they thinking? All we need is more memory! Developer Developer It works.
In his book. and Doubt). Uncertainty. that SQL. The reasons for this approach appear to be FUD (Fear. But the key to becoming the most effective developer you can be likely resides within that black box. But. They try to insulate themselves with many layers of protection so that they do no have to touch this ‘hard’ database.April 2002 7 .” Morton Consulting . They have heard that databases are ‘hard’. transactions and data integrity are ‘hard’. The ‘blackbox’ approach involves a conscious decision to protect the developers from the database. The solution – don’t make anyone do anything ‘hard’. “Expert One-on-One Oracle”.7 DBA Skills for Highly Effective Developers Oracle: The “black box” • What exactly is “the database”? • Why/how do SQL statements work? • Is there a “right” way? 7 Most developers learn Oracle SQL and PL/SQL but often don’t take their knowledge any further. They treat the database as a black box and have some software tool generate all of the code. They are actually encouraged not to learn anything about it! In many cases. they are prevented from exploiting it. Thomas Kyte sums up the “blackbox” approach as follows: “The single most common reason for failure is a lack of practical knowledge of the database – a basic lack of understanding of the fundamental tool that is being used. only learning about how to write basic SQL statements and code PL/SQL procedures and functions leaves a whole world of important information about the database as a big unknown. The “black box” that is the Oracle database can be daunting to go inside.
7 DBA Skills for Highly Effective Developers 7 DBA Skills for Developers • Understand basics of Oracle architecture • Learn to leverage the documentation • Learn how to leverage peer support • Understand locking & concurrency • Learn to use the data dictionary • Learn to write effective SQL • Learn how to communicate with the DBA 8 A little knowledge will go along way towards making the working relationship between the DBA and developer more interactive and productive. We will focus here on the knowledge that can be acquired by the developer. 7 DBA Skills for Highly Effective Developers 1) 2) 3) 4) 5) 6) 7) Learn the basics of Oracle architecture Learn about locking and concurrency issues Learn how to use the Oracle data dictionary Learn how to effectively write and tune queries Learn how to use the Oracle documentation Learn how to leverage peer support Learn how to talk “with” the DBA (not “at”) Morton Consulting .April 2002 8 .
Instance System Global Area (SGA) Program Global Area (PGA) Files Processes 9 Learning even a small bit about its architecture can help demystify Oracle. I do think a basic understanding of how Oracle is ‘put together’ can help you make better applicatio n design and development decisions. Morton Consulting . While I don’t believe it is necessary to learn all the intricacies of Oracle architecture.7 DBA Skills for Highly Effective Developers Oracle Architecture Basic Concepts & Terms • • • • • Database vs.April 2002 9 .
Oracle background processes perform specialized tasks on behalf of the user processes. It shares its resources with all users. For more information on Oracle architecture. Morton Consulting . Background Process DBWR LGWR ARCH Purpose Responsible for database writing Writes transactions to redo log files Writes redo log files to archived location The System Global Area is the great communicator of Oracle. the shared pool and the log buffer cache. executing and fetching SQL.7 DBA Skills for Highly Effective Developers Oracle Architecture System Global Area (SGA) LGWR Log Buffer Online Redo Logs Buffer Cache Shared Pool USER Client ARCH DBWR Archived Redo Logs Data Files 10 An Oracle system really is simply a system that consists of specialized processes that manipulate database blocks.April 2002 10 . It is made of several sections: the database buffer cache. see the Introductio n to the Oracle Server chapter of your Oracle Concepts documentation guide. The client “attaches” to the database via a USER process which handles most of the workload by parsing.
Oracle Press and Wrox are all publishers with good books on the market.com. PDF formatted guides can even be downloaded if desired.oracle. If you don’t have access to the documentation CD that came with your company’s Oracle version. Morton Consulting . If you’re not sure which guide to look in for the information yo u want. There are a ton of Oracle reference books out there. Membership to this site is free and once obtained gives you access to the full documentation set for your Oracle version.7 DBA Skills for Highly Effective Developers Using Documentation • Become familiar with the Oracle documentation set • Use Oracle’s Technical Resource web site (technet. O’Reilly.com) • Get a couple of good reference books 11 While the complete set of Oracle documentation may appear too big to be helpful. You can access the different guides in either HTML or PDF formats. you can access the entire documentation set on Oracle’s Technology Network site at technet. it is a key source of information.oracle. the online documentation has a search engine that can help.April 2002 11 .
htm http://www.com http://www.com http://www.orapub.com http://www.html http://128.hot-oracle.2test.interealm.sqlcourse.121.com/OracleForms http://www.htm http://www.com SQL Course .Steve Adams Jonathan Lewis Consultancy Material Dreams MetaLink (Oracle) Oracle Certified Professional Program OLN .oraperf.org http://oracle.PowerExplain http://asktom.com/cgi/genesis.co.com http://www. Inc.ixora.com http://www.ioug.Home RevealNet Oracle DBA Pipeline .belacorp.au/home.oraclezone.jlcomp.onwe.com http://www.com http://www.221/pipelines/dba/archives.com http://www.Oracle Learning Network Oracle DBA Scripts and Tips Oracle Forms Developer's Handbook Oracle Power Oracle Professional Newsletter Oracle Resource Stop Oracle Technical Network Oracle Techniques OracleTuning.April 2002 12 .orsweb.think-forward.geocities.demon.com OracleZone Oracle Documentation Orafans OraGeeks OraPerf OraPub.com http://www.com/verge Morton Consulting .com/orageeks http://www.oracle.htm http://www.htm http://128.evdbt.com http://www.com http://metalink.tusc.za/frank/faqlink.com.241.com http://www.htm http://www.orafans.com http://www.ittoolbox.dbatoolbox.com/rnalam/html/oracle/oralinks.121.materialdreams.searchdatabase.com http://www.241. Nalam .com http://technet.oracle.oradoc.com/samoracle http://www.com http://www.co. Oriole Corp .com http://verge-tech.pinnaclepublishing.oraclepower.spree.com/sqltips.oracletuning.uk http://www.SQL Tutorial TUSC-The Ultimate Software Consultants Verge Technologies .Tools and SQL scripts Prometric Testing (OCP) Rama K.com/index.cgi http://www.com/education/oln http://www.com http://www.oracle.221/pipelines/dba/index.oriolecorp.oracle.com/education/certification http://oracle.7 DBA Skills for Highly Effective Developers Support Resources • • • • • User Groups On-line Discussion Groups/Forums Mail Lists Technical Journals Oracle-related Web Sites 12 Ask Tom DBAToolBox Evergreen Database Technologies Great Oracle Sites to Visit Hot Oracle IOUG-A ITtoolbox Portal for Oracle Ixora .com http://www.Papers SearchDatabase.com/OP http://www.Good Oracle Links RevealNet Oracle DBA Pipeline .jsp http://members.
If you don’t understand how Oracle accesses data for reads and locks data for writes. you can possibly make very serious mistakes in your application that will cause your application to not function properly as more users are added to your system. see the Oracle Concepts guide.7 DBA Skills for Highly Effective Developers Locking & Concurrency • Oracle locks ONLY at the row level • Data is never locked for read • Data being written doesn’t block data being read • Data being written is only blocked by another data writer that has already locked the row 13 One of the most differentiating factors between databases is how they handle locking and concurrency. It is critical for the developer to understand how Oracle handles locking in order to successfully write their applications. These are some basic rules of thumb about how Oracle handles locking and concurrency.April 2002 13 . One database is likely very different from another. To get a more complete overview of this topic. Morton Consulting .
This form of isolation does not keep other transactions from modifying the data read by a query. This level also would allow two sessions to modify the same row at basically the same time and not be notified. the query may return different results each time. In this manner. Morton Consulting . in effect.7 DBA Skills for Highly Effective Developers Read Committed Isolation • Read committed (default) – An executed query sees only data that was committed before the query (not the transaction) began – SET TRANSACTION ISOLATION LEVEL READ COMMITTED . it can be set for all transactions within a given session: ALTER SESSION SET ISOLATION_LEVEL READ COMMITTED . So. duplicate the update. Therefore. 14 This level of consistency is the default and is the minimum level enforced by Oracle. Instead of setting the isolation level at the beginning of each transaction. if a transaction executes the same query multiple times. This level of isolation is appropriate for applications where few conflicts are likely. It basically guarantees that when a single query executes. a query will never see any changes made by transactions that commit while the query is executing. two transactions could apply an update to a row one following the other and. it returns data from the point in time at which the query began.April 2002 14 .
multiple transactions attempting to access the same data would be notified of changes to the data made since it initially retrieved it. it can be set for all transactions within a given session: ALTER SESSION SET ISOLATION_LEVEL SERIALIZABLE .April 2002 15 . 15 Serializable isolation enforces read consistency at the transaction level. Oracle would generate an error notifying that another transaction modified its data after it began: ORA-08177: Cannot serialize access for this transaction Instead of setting the isolation level at the beginning of each transaction. Using this isolation level. Morton Consulting . All data access during a single transaction reflect the state of the database at the time the transaction began. The exception to this is that the transaction does see changes made by itself since the time it started. This level effectively prohibits duplicate modifications without notifying the transaction that data had changed.7 DBA Skills for Highly Effective Developers Serializable Isolation • Serializable transactions – Transactions that see only changes that were committed at the start time of the transaction plus any changes made by the transaction itself – SET TRANSACTION ISOLATION LEVEL SERIALIZABLE .
April 2002 16 . 16 Read-only isolation ensures that transactions are consistent from the point in time they begin and do not allow any DML to be executed during the transaction that would cause changes.DEL) – SET TRANSACTION ISOLATION LEVEL READ ONLY.UPD.7 DBA Skills for Highly Effective Developers Read-Only Isolation • Read-only – Transactions that see only changes that were committed at the start time of the transaction and do not allow any DML statements (INS. Morton Consulting .
application developers only need to define the transactions properly and Oracle will handle the locking automatically. Morton Consulting . Locking is tightly integrated with transaction control. To get a more complete overview of Oracle’s locking mechanisms. see the Oracle Concepts guide. Therefore. Locking can be manually manipulated if you wish to override Oracle’s default locking mechanisms.April 2002 17 .7 DBA Skills for Highly Effective Developers Locking Mechanisms • Locks prevent destructive interaction between transactions accessing the same resource • Resources include two general types of objects – Structures and data (tables and rows) – System objects (memory and data dictionary rows) 17 Oracle will automatically acquire the locks it needs when executing SQL statements.
. you can leverage the data dictionary as a wonderful reference to find out just about anything you’d like. Morton Consulting .7 DBA Skills for Highly Effective Developers The Data Dictionary • Read only set of tables and views that house information about the database – – – – – – – All object definitions (tables. Oracle itself uses the data dictionary to find out information about objects being accessed.April 2002 18 . users and their privileges and records information about all objects as they are created and modified. etc) Space allocations Default values Integrity constraints Users and privileges Auditing information (who used what & when) Lots of other stuff. Other objects can be made available to you by specific permissio n. the SELECT_CATALOG_ROLE. All users have access to see at least part of the information stored in the data dictionary. You can see any data dictionary object that is named beginning with ALL_ or USER_. As a developer. will allow you to see system performance tables (V$) and more. What if you want to know how big a particular table is or what indexes or integrity constraints are on a given table? Use the data dictionary. when granted to you. . 18 The data dictionary is the central information resource for your Oracle database. Specifically.
Morton Consulting . will allow you to see system performance views (V$) and more. request from your DBA to be granted the role called: SELECT_CATALOG_ROLE 19 Other objects can be made available to you by specific permissio n.April 2002 19 . when granted to you. You’ll need access to many of these views if you want to do more advanced tuning of your application code. Specifically. the SELECT_CATALOG_ROLE.7 DBA Skills for Highly Effective Developers The Data Dictionary • To gain access to additional data dictionary information.
views a nd clusters USER_TAB_COL_STATISTICS Columns of user's tables. TABLE_NAME COMMENTS -----------------------------. views a nd clusters USER_TAB_COMMENTS Comments on the tables and views owned by the user USER_TAB_HISTOGRAMS Histograms on columns of user's t ables USER_TAB_MODIFICATIONS Information regarding modificatio ns to tables 20 To get a listing of the objects in the data dictionary. you can select from the DICT view: column comments format a40 word_wrapped SELECT * FROM dict .April 2002 20 .7 DBA Skills for Highly Effective Developers The Data Dictionary SELECT * FROM dict . views a nd clusters USER_TAB_COLUMNS Columns of user's tables.---------------------------------------USER_TABLES Description of the user's own rel ational tables USER_TABLESPACES Description of accessible tablespaces USER_TAB_COLS Columns of user's tables. Morton Consulting .
It looks in the comments column to find a match and displays the results.7 DBA Skills for Highly Effective Developers The Data Dictionary chk_dict. Morton Consulting .April 2002 21 .sql column comments format a40 word_wrapped set verify off clear screen accept search_phrase char prompt "Enter a search phrase: " SELECT * FROM dict WHERE UPPER(comments) LIKE UPPER('%&search_phrase%') ORDER BY table_name / 21 This script provides a simple way to query the data dictionary to look for a particular word or phrase.
Even if you go no further. You will be presented with a list of steps that were/will be executed in order to retrieve the data requested by your statement. if any. Well.April 2002 22 . The bottom line is to start somewhere and learn! Morton Consulting . In other words. educate yourself and learn at least the basics of SQL statement tuning. how you write your SQL statements does matter! Writing good and well-tuned SQL is taught in multi-day classes but so often a developer is never exposed to this information. There are other more advanced tools available for your use (like TKPROF). you will at least be armed with some information that you can take to your DBA to ask for assistance in making your code run faster. many of us think we’re successful if the query we run brings back the data we want. Performance of how our code runs is something that gets left to the DBA.7 DBA Skills for Highly Effective Developers Writing Efficient SQL • How you write your SQL does matter! • Learn a few basic tools – EXPLAIN PLAN – AUTOTRACE – Session tracing & TKPROF • Use iterative testing to find the best way to write your statements 22 One of the most common mistakes a misinformed developer can make is to think that it doesn’t matter how you write SQL statements. So. Start by looking into the SQL*Plus AUTOTRACE command and how to use EXPLAIN PLAN to determine how your statement is being executed by Oracle. and see how table joins were handled. You can see which indexes were used.
April 2002 23 .7 DBA Skills for Highly Effective Developers EXPLAIN PLAN • EXPLAIN PLAN displays the execution plan for a SQL statement • The execution plan shows the exact sequence of steps that the Oracle optimizer chose to process the SQL • The plan is stored in a table called PLAN_TABLE 23 Morton Consulting .
7 DBA Skills for Highly Effective Developers PLAN_TABLE Creation • The plan_table must be created prior to executing the EXPLAIN PLAN command • The DDL statement to create the plan_table can normally be found in a script named utlxplan.sql 24 Morton Consulting .April 2002 24 .
April 2002 25 .7 DBA Skills for Highly Effective Developers Important Columns • The optimizer’s access path is identified in the OPERATION and OPTION columns • The ID column identifies the execution order of the steps in the plan 25 Morton Consulting .
UPDATE or DELETE). using the statement_id is necessary to be able to tell the difference between your plans and those of other developers.7 DBA Skills for Highly Effective Developers The EXPLAIN PLAN Command • EXPLAIN PLAN statement has the following syntax: EXPLAIN PLAN [SET STATEMENT_ID = string literal] [INTO table_name] FOR sql statement 26 SET STATEMENT_ID is the parameter that allows you to assign a label to a given execution plan. You can set the statement_id to any string you desire but if not included. INSERT. Morton Consulting .April 2002 26 . If you will be sharing a single plan_table with others. INTO is a clause that allows you to put explain plan results into a plan_table that you create. the column will contain NULL. FOR is the keyword that indicates the SQL statement you wish to have explained. You must create this other table as an exact duplicate of the “official” plan_table. You may explain any query or DML statement (SELECT.
The complete example is shown below. cost FROM plan_table ORDER BY id.------. cardinality.------SELECT STATEMENT 0 94.362 292 TABLE ACCESS FULL EMP 1 0 94. id. options. object_name. EXPLAIN PLAN FOR SELECT * FROM emp. parent_id.---. the example on the slide was shortened. id.7 DBA Skills for Highly Effective Developers Explaining a Simple Query EXPLAIN PLAN FOR SELECT * FROM emp. OPERATION OPTIONS OBJECT_NAME ID PARENT_ID CARD COST --------------. To save space.April 2002 27 . COL operation FORMAT A20 WORD_WRAPPED COL options FORMAT A15 COL object_name FORMAT A15 COL id FORMAT 999 COL cardinality FORMAT 999. object_name. SELECT operation.--------.-----------. cost FROM plan_table ORDER BY id.999 HEADING CARD SELECT operation. DELETE FROM PLAN_TABLE. options.---------. cardinality. parent_id. Morton Consulting . a full table scan is the most efficient access path and is chosen by the optimizer.362 292 27 Since the is no WHERE clause on the explained query (all the rows are being selected).
the earlier it is executed.sql that will display the explain plan data formatted in a table-like fashion. Oracle provides a utility script called utlxpls.dept_no.----------------------SELECT STATEMENT NESTED LOOPS TABLE ACCESS FULL DEPARTMENT TABLE ACCESS BY INDEX ROWID EMP INDEX RANGE SCAN EMP_DEPT_FK ID PARENT_ID ---. Morton Consulting . the more heavily indented an access path is. Here’s a SQL statement you can use to display the plan hierarchically: SELECT FROM RTRIM(LPAD(‘ ‘.7 DBA Skills for Highly Effective Developers Reading Execution Plans EXPLAIN PLAN FOR SELECT * FROM emp e. If two steps are indented at the same level. 2 * LEVEL) || RTRIM(operation) || ‘ ‘ || RTRIM(options) || ‘ ‘ || object_name) optimizer_plan plan_table CONNECT BY PRIOR id = parent_id START WITH id = 0 . OPERATION OPTIONS OBJECT_NAME ----------------.--------0 1 0 2 1 3 1 4 3 POSITION -------201 1 1 2 1 28 The optimizer creates multiple steps in the execution plan for a complex query. Each row of output in the plan_table represents one step of execution plan. Some access paths are “joined” – such as an index access that is followed by a table lookup. Interpreting the output When interpreting the plan output from the above SQL statement.dept_no = d. the uppermost statement is executed first. department d WHERE e.April 2002 28 .
Morton Consulting . SET AUTOTRACE ON EXPLAIN enables the display of only the explain plan. SET AUTOTRACE ON STATISTICS enables the display of only the execution statistics. The settings for AUTOTRACE are as follows: SET AUTOTRACE ON enables automatic generation of the explain plan and execution statistics. SET AUTOTRACE TRACEONLY enables both the display of the explain plan and the execution statistics but suppresses the display of the data from the SQL statement.April 2002 29 . SET AUTOTRACE OFF disables automatic generation of the explain plan. you can automate the generation of explain plans.7 DBA Skills for Highly Effective Developers SQL*Plus AUTOTRACE • The statement has the following syntax: SET AUTOTRACE [ON | OFF | TRACEONLY] [EXPLAIN] [STATISTICS] 29 Automating Explain Plans By turning the AUTOTRACE SQL*Plus environment variable on. When attempting to use the AUTOTRACE facility. you will need to have been granted the PLUSTRACE role by the DBA and must also have access to a PLAN_TABLE.
30 TRACEONLY suppresses query output.April 2002 30 . 97 rows selected. autotrace runs the query SQL> SET AUTOTRACE TRACEONLY EXPLAIN STATISTICS SQL> SELECT * FROM EMP.7 DBA Skills for Highly Effective Developers AUTOTRACE Example… • SET AUTOTRACE ON provides EXPLAIN output and statistics on query execution • By default. Morton Consulting .
Physical Reads – Physical access of blocks from disk. or memory. how much data written to the redo log). Redo Size – Amount of redo generated for the operation (i.April 2002 31 . reads. Morton Consulting . This statistic accounts for actions happening “behind the scenes” of the SQL you execute (calls to the data dictionary. DB Block Gets & Consistent Gets – logical.e. etc).7 DBA Skills for Highly Effective Developers …AUTOTRACE Example Execution Plan ---------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE (Cost=1 Card=97 Bytes =9008 ) 1 0 TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=97 Bytes=900 8) Statistics ---------------------------------------------------------0 recursive calls Memory 2 db block gets Reads 1 consistent gets 0 physical reads 0 redo size 1713 bytes sent via SQL*Net to client 421 bytes received via SQL*Net from client 3 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 14 rows processed SQL> SET AUTOTRACE OFF 31 Definitions Recursive calls – system generated SQL.
the execution plan and rows returned for each step. It can take a trace file (generated by turning on SQL_TRACE for a session) and format it to display execution statistics. it does require a significant learning curve to be able to interpret the output effectively. 32 Tkprof provides statistics that are unavailable from any other source. While tkprof is a powerful tool.April 2002 32 . • The tkprof utility formats the resulting output • Tkprof output breaks down execution statistics. the execution plan and rows returned for each step.7 DBA Skills for Highly Effective Developers tkprof and SQL_TRACE • To cause a trace of SQL execution to be generated for a session: ALTER SESSION SET SQL_TRACE = TRUE . Morton Consulting .
the more able you will be to ask pointed questions that will get you the information you need. as most DBAs do.April 2002 33 . Your efforts to learn about the database can be served greatly by listening to someone who knows it intimately. listen. The more you know. be sure that you’ve done your homework. Most importantly. Provide example code and discuss the results of tests you’ve performed. you show that you respect the DBA’s time and priorities and will likely be able to have their full attention when you do talk with them.7 DBA Skills for Highly Effective Developers Interacting with the DBA • • • • Schedule a time to talk Show you’ve done your homework Be specific Ask questions about how/why things are working as they are • Listen 33 When you need to talk with your DBA. Morton Consulting . Before going to your DBA. Be specific about what you’ve tried and what you need to accomplish. By doing this. the first thing to do is schedule a time to talk.
April 2002 34 .7 DBA Skills for Highly Effective Developers Benefits of New Knowledge • Better applications • Better relationships • Less application performance issues • Less time re-writing code or changing application design • More confidence in your abilities 34 Morton Consulting .
April 2002 35 .7 DBA Skills for Highly Effective Developers Questions & Answers 35 Morton Consulting .
com Visit us on the web at: www.April 2002 36 .morton-consulting.7 DBA Skills for Highly Effective Developers Thanks! Send questions to: email@example.com 36 Morton Consulting .
This action might not be possible to undo. Are you sure you want to continue?
We've moved you to where you read on your other device.
Get the full title to continue listening from where you left off, or restart the preview.