SQL-prompt i Oracle

Bruker du også SQL*Plus når du arbeider i Oracle? Da har jeg et tips til deg.

Det første jeg gjør når jeg arbeider i en ny database er å redigere SQL-prompten. Da vises navnet du har logget inn med og instanse navnet i prompten.

Variabelen sqlprompt defineres enten i filen glogin i katalogen $ORACLE_HOME/sqlplus/admin eller i lokal fil login.sql. Arbeider du fra en klient utføres endringen der.

SQL-prompt i Oracle10g og Oracle11g

 SET sqlprompt “_USER’@'_CONNECT_IDENTIFIER SQL> “

Og resultatet blir:

 SYS@DW SQL> 

Dette kan du lese mere om i Oracle dokumentasjonen, Oracle10g og Oracle11g.

SQL-prompt i Oracle9i

I Oracle9i kan du ikke bruke denne metoden uten må jukse litt. Her ser du en mulig løsning:

-- Definert av Ingemar J. Haverstad
SET TERMOUT OFF

DEFINE gname=idle

COLUMN global_name new_value gname

SELECT LOWER(user) || '@' ||
  SUBSTR(global_name, 1,
                decode(dot, 0, LENGTH(global_name), dot-1)) global_name
  FROM (SELECT global_name, INSTR(global_name, '.') dot
FROM global_name);

SET sqlprompt '&gname SQL> '

SET TERMOUT ON

Denne er litt mer tungvint men kanskje OK allikevel.

SQL-prompt i Data Guard

Dette leder oss til en variant som jeg bruker i Data Guard. Utfordringen her er å vite om man er i primærbasen eller i Data Guard databasen. Følgende knep kan brukes:

 -- Definert av Ingemar J. Haverstad
SET TERMOUT OFF

DEFINE g_name=idle

COLUMN global_name new_value g_name

SELECT '[' || database_role || '] ' ||
  LOWER(user) || '@' ||
  db_unique_name global_name
FROM v$database;

SET sqlprompt '&g_name SQL> '

SET TERMOUT ON

Resultatet blir følgende i primær databasen:

 [PRIMARY] sys@CHICAGO SQL>

Resultatet blir følgende i standby databasen:

 [PHYSICAL STANDBY] sys@BOSTON SQL>

Vakkert, ikke sant!

SQL-prompt i Real Application Cluster

Noe liknende kan også brukes i Real Application Cluster miljøer. Her er det en fordel å angi hvilken av flere instanser du er innlogget på. Dette vises best med et eksempel:

 -- Definert av Ingemar J. Haverstad
SET TERMOUT OFF

DEFINE g_name=idle

COLUMN global_name new_value g_name

SELECT
  LOWER(user) || '@' ||
  instance_name global_name
FROM v$instance;

SET sqlprompt '&g_name SQL> '

SET TERMOUT ON

Resultatet blir følgende når system brukeren er pålogget første instansen:

 system@PROD1 SQL>

Og resultatet blir følgende når system brukeren er pålogget andre instansen:

 system@PROD2 SQL>

This post is also available in: English

Tags:

Legg igjen en kommentar