Oracle Advanced Queuing Series: 1. Create Message Type, AQ Table and Queue

Welcome to the first part of the series “Oracle Advanced Queuing”.

We start with the basic elements of Oracle Advanced Queuing:
the message type, the queue table and finally the queue.

  1. Create a Type for your messages:
    CREATE TYPE my_queue_typ  AS OBJECT(message_text VARCHAR2(4000));
  2. Create an AQ Table based on your type:
    EXEC DBMS_AQADM.CREATE_QUEUE_TABLE('my_queue_table', 'my_queue_type');
  3. Create a Message Queue with your table:
    EXEC DBMS_AQADM.CREATE_QUEUE('my_queue', 'my_queue_table');
  4. Start the queue:
    EXEC DBMS_AQADM.START_QUEUE('my_queue');

I will speak at the “DOAG 2013 Konferenz + Ausstellung”

I will be on the “DOAG 2013 Konferenz + Ausstellung” in Nürnberg (Nuremberg), Germany from November 19th to 21th.

I will speak at November 21th, at 3 pm at room 2 “Seoul”:

Lösen Sie (fast) alle Ihre Probleme mit Oracle Advanced Queuing

(English: “Solving (almost) all your IT problems with Oracle Advanced Queuing”)

The DOAG is the largest German Oracle user group with over 5000 members.
This years conference offers over 400 speeches from well known Oracle experts like:

2013-Konferenz-Banner_Speaker-180x150_hoch

 

SQL-Developer: Copy result grid cells (columns) with headers

We will use the following Select during this post:

SELECT c.owner, c.table_name, c.column_name, c.data_type 
  FROM ALL_TAB_COLUMNS c 
 WHERE table_name = 'ALL_TAB_COLUMNS'
   AND c.column_name like 'DATA%';

Here is the result:

CopyColumns_01

Select certain cells in the result grid

Before we can copy cells in the result grid, we need to select them:

  1. click (left mouse button) inside the first cell of the grid you want to copy
  2. hold down the left mouse button and move your mouse until all cells you want are selected (marked)
  3. release the left mouse button

CopyColumns_Selected

Select all cells in the result grid

If you want to select all cells in the result grid

  1. click somewhere in the result grid (left mouse button)
  2. press CTRL+a to select all cells

Copy cells from the result grid

Select the cells you want to copy and press CTRL+c.
Go to the program of your choice, I will use Excel here, and press CTRL+v:

CopyColumns_Exel

Copy cells with headers from the result grid

Select the cells you want to copy and press CTRL+Shift+c.
Go to the program of your choice, again Excel here, and press CTRL+v:

CopyColumns_Exel_Header

SQL-Developer: How to change the date format of the result grid – “Why does my date column have no time?”

You can decide how SQL-Developer display date and timestamp columns.

  1. Go to the “Tools” menu and open “Preferences…”
  2. In the tree on the left open the “Database” branch and select “NLS”
  3. Now change the entries “Date Format”, “Timestamp Format” and “Timestamp TZ Format” as you wish!

ISO formated output with date and time

  • Date Format: YYYY-MM-DD HH24:MI:SS
  • Timestamp Format: YYYY-MM-DD HH24:MI:SSXFF
  • Timestamp TZ Format: YYYY-MM-DD HH24:MI:SSXFF TZR

Image

The result looks like this:

Image

German format for date and time

  • Date Format: YYYY-MM-DD HH24:MI:SS
  • Timestamp Format: YYYY-MM-DD HH24:MI:SSXFF
  • Timestamp TZ Format: YYYY-MM-DD HH24:MI:SSXFF TZR

Image

The result looks like this:

Image

Just choose any format you like.

Date format elements

Element Description
- Punctuation and quoted text is reproduced in the result.
/
,
.
;
:
“text”
AD AD indicator with or without periods.
A.D.
AM Meridian indicator with or without periods.
A.M.
BC BC indicator with or without periods.
B.C.
CC Century.
SCC
If the last 2 digits of a 4-digit year are between 01 and 99 (inclusive), then the century is one greater than the first 2 digits of that year.
If the last 2 digits of a 4-digit year are 00, then the century is the same as the first 2 digits of that year.
For example, 2002 returns 21; 2000 returns 20.
D Day of week (1-7). This element depends on the NLS territory of the session.
DAY Name of day.
DD Day of month (1-31).
DDD Day of year (1-366).
DL Returns a value in the long date format, which is an extension of the Oracle Database DATE format, determined by the current value of the NLS_DATE_FORMAT parameter. Makes the appearance of the date components (day name, month number, and so forth) depend on the NLS_TERRITORY and NLS_LANGUAGE parameters. For example, in the AMERICAN_AMERICA locale, this is equivalent to specifying the format ‘fmDay,Monthdd,yyyy’. In the GERMAN_GERMANY locale, it is equivalent to specifying the format ‘fmDay, dd.Month yyyy‘.
Restriction: You can specify this format only with the TS element, separated by white space.
DS Returns a value in the short date format. Makes the appearance of the date components (day name, month number, and so forth) depend on the NLS_TERRITORY and NLS_LANGUAGE parameters. For example, in the AMERICAN_AMERICA locale, this is equivalent to specifying the format ‘MM/DD/RRRR‘. In the ENGLISH_UNITED_KINGDOM locale, it is equivalent to specifying the format ‘DD/MM/RRRR‘.
Restriction: You can specify this format only with the TS element, separated by white space.
DY Abbreviated name of day.
E Abbreviated era name (Japanese Imperial, ROC Official, and Thai Buddha calendars).
EE Full era name (Japanese Imperial, ROC Official, and Thai Buddha calendars).
FF [1..9] Fractional seconds; no radix character is printed. Use the X format element to add the radix character. Use the numbers 1 to 9 after FF to specify the number of digits in the fractional second portion of the datetime value returned. If you do not specify a digit, then Oracle Database uses the precision specified for the datetime data type or the data type’s default precision. Valid in timestamp and interval formats, but not in DATE formats.
Examples: ‘HH:MI:SS.FF’
SELECT TO_CHAR(SYSTIMESTAMP, ‘SS.FF3′) from DUAL;
FM Returns a value with no leading or trailing blanks.
See Also: Additional discussion on this format model modifier in the Oracle Database SQL Language Reference
FX Requires exact matching between the character data and the format model.
See Also: Additional discussion on this format model modifier in the Oracle Database SQL Language Reference
HH Hour of day (1-12).
HH12
HH24 Hour of day (0-23).
IW Week of year (1-52 or 1-53) based on the ISO standard.
IYY Last 3, 2, or 1 digit(s) of ISO year.
IY
I
IYYY 4-digit year based on the ISO standard.
J Julian day; the number of days since January 1, 4712 BC. Number specified with J must be integers.
MI Minute (0-59).
MM Month (01-12; January = 01).
MON Abbreviated name of month.
MONTH Name of month.
PM Meridian indicator with or without periods.
P.M.
Q Quarter of year (1, 2, 3, 4; January – March = 1).
RM Roman numeral month (I-XII; January = I).
RR Lets you store 20th century dates in the 21st century using only two digits.
RRRR Round year. Accepts either 4-digit or 2-digit input. If 2-digit, provides the same return as RR. If you do not want this functionality, then enter the 4-digit year.
SS Second (0-59).
SSSSS Seconds past midnight (0-86399).
TS Returns a value in the short time format. Makes the appearance of the time components (hour, minutes, and so forth) depend on the NLS_TERRITORY and NLS_LANGUAGE initialization parameters.
Restriction: You can specify this format only with the DL or DS element, separated by white space.
TZD Daylight saving information. The TZD value is an abbreviated time zone string with daylight saving information. It must correspond with the region specified in TZR. Valid in timestamp and interval formats, but not in DATE formats.
Example: PST (for US/Pacific standard time); PDT (for US/Pacific daylight time).
TZH Time zone hour. (See TZM format element.) Valid in timestamp and interval formats, but not in DATE formats.
Example: ‘HH:MI:SS.FFTZH:TZM’.
TZM Time zone minute. (See TZH format element.) Valid in timestamp and interval formats, but not in DATE formats.
Example: ‘HH:MI:SS.FFTZH:TZM’.
TZR Time zone region information. The value must be one of the time zone region names supported in the database. Valid in timestamp and interval formats, but not in DATE formats.
Example: US/Pacific
WW Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year.
W Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.
X Local radix character.
Example: ‘HH:MI:SSXFF’.
Y,YYY Year with comma in this position.
YEAR Year, spelled out; S prefixes BC dates with a minus sign (-).
SYEAR
YYYY 4-digit year; S prefixes BC dates with a minus sign.
SYYYY
YYY Last 3, 2, or 1 digit(s) of year.
YY
Y

SQL-Developer: Speed up program start

Starting SQL-Developer takes too long?

Here’s what you can do:

1. Use native look and feel

  1. Select “Tools/Preferences” from the main menu.
  2. Select “Environment” in the list on the left.
  3. Set “Look and Feel:” to the operation system you use.

2. Disable unneeded extensions

  1. Select “Tools/Preferences” from the main menu.
  2. Select “Extensions” in the list on the left.
  3. Unselect all extensions that you don’t need. Look for unneeded “Migrations”, “Spatial”, “TimesTen” and others.

Here’s my current configuration:

3. Optimize your virus scanner

Some virus scanners are slowing down the start of SQL-Developer by several minutes!
The reason for this is that SQL-Developer is a Java based program and consists of several large “.jar”-archives, which are just “.zip”-archives with another ending. When SQL-Developer gets started, several “.jar”-archives are accessed and some virus scanners will scan the whole “.jar”-archives, even when only one small file in it is accessed.

There is no easy workaround but here are some options:
(What ever you choose may affect your security – so be careful!)

  • Add the directory where you have installed SQL-Developer from virus scans.
  • Optimize your virus scanner to not always scan this directory.
  • Optimize your virus scanners handling of “.jar”-archives/Java programs.

Missing statements in SQL Monitoring

Since Oracle 11g, the database offers real-time SQL Monitoring, a great feature for insights of currently and previously running queries.
In most cases this works great without effort, but sometimes your statements won’t show.
This can be caused by statements with very large execution plans or statements with short execution times.

Monitor statements with very large execution plans

To include statements with very large execution plans in SQL Monitoring, we need to increase two thresholds. The following values served me well, but your millage may vary:

ALTER SESSION SET "_SQLMON_MAX_PLAN"=4020;
ALTER SESSION SET "_SQLMON_MAX_PLANLINES"=4000;

Remember to execute these commands in the same session and before the statements you want to monitor!

Monitor short running statements

To include short running statements into SQL Monitoring, we can use the MONITOR hint.

example:
SELECT /*+ MONITOR*/ * FROM DUAL;

Remeber that this hint is only valid when the parameter CONTROL_MANAGEMENT_PACK_ACCESS is set to DIAGNOSTIC+TUNING.

Execlude statements from SQL Monitoring

To exclude statements from SQL Monitoring, we can use the NO_MONITOR hint.

example:
SELECT /*+ NO_MONITOR*/ count(*) FROM DBA_OBJECTS CROSS JOIN DBA_OBJECTS;

Access SQL Monitoring

The SQL Monitoring informations can be accessed through

  • the tables V$SQL_MONITOR and V$SQL_PLAN_MONITOR
    (RAC:  GV$SQL_MONITOR and GV$SQL_PLAN_MONITOR)
  • a PL/SQL procedure:
    variable l_rep CLOB;
    exec :l_rep := DBMS_SQLTUNE.REPORT_SQL_MONITOR();
    print :l_rep
  • or with Oracle Enterprise Manager