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
English
Norsk 