SqlCL czyli Oracle Command Line

Dzięki uprzejmości jednego z kolegów ostatnio poznałem dość ciekawe i przydatne narzędzie do zarządzania bazami danych Oracle. Poniżej znajdziecie kilka niezbędnych informacji na temat instalacji i użytkowania tego narzędzia.

Na początek musimy ściągnąć Oracle SQLCL ze strony
http://www.oracle.com/technetwork/developer-tools/sqlcl/downloads/index.html

Po ściągnięciu rozpakowujemy plik (np.sqlcl-17.3.0.271.1943-no-jre.zip). Najlepiej gdzieś na dysku w folderze głównym (ja to wypakowałem do folderu c:\SQLCL).
Aplikacja wymaga instalacji oprogramowania Java. Jeśli jej nie posiadamy również trzeba ją ściągnąć i zainstalować.
https://www.java.com/pl/download/manual.jsp

PODŁĄCZANIE DO BAZY

Gdy już mamy wszystko rozpakowane i poinstalowane możemy spróbować podłączyć się do jakiejś bazy danych Oracle.
Aby się podłączyć należy z linii poleceń uruchomić program c:\sqlcl\bin\SQL.EXE

$> sql {USER}/{PASSWORD}@{ADRES_IP}:{PORT}:{SID_BAZY}

Parametru {PASSWORD} nie musimy podawać i wtedy po podłączeniu będziemy musieli je wpisać.

czyli przykładowo wpisujemy:

$> sql admin01/Qwer123@192.168.1.1:1521:BAZA

Jeśli posiadamy plik TNSNAMES z wpisanymi danymi baz możemy uruchomić SQL-a w następujący sposób

$> sql user@baza

SQLcl: Release 4.1.0 Release Candidate on Wed Aug 27 11:10:09 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Password? (**********?) ********************
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

Po prawidłowym podłączeniu powinniśmy otrzymać znak SQL> i możemy wydać zapytanie do bazy:

jeśli chcemy się podłączyć do bazy jako user SYS na końcu musimy dopisać AS SYSDBA czyli

$> sql sys/Qwer123@192.168.1.1:1521:BAZA as sysdba

W każdej chwili możemy się przelogować na innego usera np

SQL> connect sys@192.168.56.103:1521:BAZA AS SYSDBA

Password? (**********?) ******
Connected.
SQL>

Jeśli chcemy uruchomić SQLCL ale nie chcemy się połączyć z żadną bazą (np. chcemy dopisać kolejny alias) wykonujemy polecenie

$> sql /nolog

SQLcl: Release 4.2.0.16.160.2007 RC on Thu Sep 08 12:18:07 2016
Copyright (c) 1982, 2016, Oracle.  All rights reserved.

SQL>

Aby rozłączyć się z bazą

SQL> disconnect

Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

Po rozłączeniu trzeba ponownie połączyć się bazą za pomocą polecenie CONNECT

HELP

Za każdym razem gdy nie jesteśmy pewni co spisać możemy skorzystać w opcji HELP

Aby skorzystać z konkretnej pomocy dotyczącej konkretnego polecenia wydajemy polecenie:

SQL> HELP ALIAS

ALIAS
------

alias [=;| LOAD []|SAVE [] | LIST [] |
                               DROP  | DESC  ]

Alias is a command which allows you to save a sql, plsql or sqlplus script and assign it a shortcut command.
        "alias" - print a list of aliases
        "alias list " - list the contents of the alias
        "alias =select :one from dual;" - Simple alias command
        Define an alias simply by using the alias keyword followed by a single identifier
        name followed by an '='. Anything after the '=' will be used as the alias contents.
        For example, if it is SQL, it will be terminated by a ';'. If it is PLSQL, it will
        be terminated by a '/'

Examples:
--------
1. SQL Example with Binds

        SQL> alias fred=select :one from dual;
        In this example, a bind variable can be set up in the alias.
        Running the alias is done like this below with any parameters
        to the alias being bound to a bind variable by SQLcl

        SQL> fred 1
        Command=fred
        :ONE
        ----
        >

2. PL/SQL example
        SQL> alias db= begin dbms_output.put_line('hi'); end;
        >  /
        Here the block of PLSQL is terminated by the '/' on a separate
        line at which point it is accepted as a new alias.

        SQL> db
        Command=db
        PL/SQL procedure successfully completed.
        hi

Summary
-------
        alias ..=.. is terminated by ';'
        alias ..=begin or ..=declare is terminated by a / on a newline
        alias on its own gives a list of existing aliases.

ALIASY czyli ułatwianie sobie życia

Skoro już wspomnieliśmy o aliasach … SQLCL daj nam możliwość zdefiniowania aliasów czy poleceń które wywołują często wykonywane zapytanie na bazie.

Przykładowo po podłączeniu do bazy często wykonujemy zapytanie

SELECT host_name,instance_name,startup_time,status FROM v$instance;

Zamiast za każdym razem wpisywać całe zapytanie utworzymy alias’a 🙂

SQL> ALIAS xsid = SELECT host_name,instance_name,startup_time,status FROM v$instance;

Teraz zamiast zapytania wpisujemy nazwę aliasu czyli xsid

SQL> xsid

Nie wiem jakie polecenie uruchamia podświetlanie nazw kolumn tak jak to wygląda na obrazku powyżej ale wiem że po wydaniu polecenia INFO np info hr.departments każde następne zapytanie będzie zwracało wynik z podświetlanymi nazwami kolumn 🙂

Jeśli chcielibyśmy zmienić treść aliasu nie musimy go usuwać i tworzyć od nowa. Wystarczy że wpiszemy nową treść a zostanie ona nadpisana.

Aby wyświetlić listę naszych aliasów wpisujemy

SQL> alias

locks
sessions
tables
tables2
xsid

Aby wyświetlić treść naszego aliasu:

SQL> alias list xsid

xsid
----

SELECT host_name,instance_name,startup_time,status FROM v$instance

Aby usunąć alias’a wpisujemy:

SQL> alias drop xsid

Alias xsid dropped

Można też zapisać nasze aliasy do pliku za pomocą polecenia

SQL> alias save micek.sqlcl

ALIAS-007 - Aliases saved to micek.sqlcl

podgląd pliku micek.sqlcl (nawiasy zostały zastąpione znakami [])

[?xml version = '1.0' encoding = 'UTF-8'?]
[aliases]
   [alias name="xsid"]
      [description/]
      [queries]
         [/sql]
         [/query]
      [/queries]
   [/alias]
[/aliases]

a następnie je wczytać na innym komputerze

SQL> alias load micek.sqlcl

HISTORY czyli pamiętnik administratora 😉

Pokazuje historię naszych poleceń wykonanych w SQLCL

SQL> help history

HISTORY
---------
history [ | FULL | USAGE | SCRIPT | TIME | CLEAR (SESSION)?]

SQL>history full
  1  select 1 from dual;
  2  select 2
  >  from dual;
  3  select 3 from dual
  >  where 1=1;

SQL>history usage
  1  (2) select 1 from dual;
  2  (11) select 2 from dual;
  3  (2) select 3 from dual where 1=1;

SQL>history script
 select 1 from dual;
 select 2 from dual;
 select 3 from dual where 1=1;

SQL>history 3
  1  select 3 from dual
  2* where 1=1;

SQL>his time
  1           clear
  2           cl bre
  3  (00.201) select 1 from dual

SQL> history lub SQL> h

History:
  1  alias sid = select HOST_NAME,INSTANCE_NAME,STARTUP_TIME,STATUS from v$instance;
  2  select host_name from v$instance;
  3  tables
  4  select * from v$instance;
  5  alias sidx = select * from v$instance;
  6  sidx
  7  select * from v$instance; 
  8  alias table
  9  alias /?
 10  select * from v$instance;
...

jesli interesuje na 7 zapytanie sprawdzamy jego składnie

SQL> history 7

  1* select * from v$instance;

i uruchamiamy

SQL> /

  INSTANCE_NUMBER INSTANCE_NAME   HOST_NAME               VERSION      STARTUP_TIME   STATUS   PARALLEL     THREAD# ARCHIVER   LOG_SWITCH_WAIT   LOGINS    SHUTDOWN_PENDING   DATABASE_STATUS   INSTANCE_ROLE      ACTIVE_STATE   BLOCKED     CON_ID INSTANCE_MODE   EDITION   FAMILY
                1 baza            localhost.localdomain   12.1.0.2.0   17/10/31       OPEN     NO                 1 STOPPED                      ALLOWED   NO                 ACTIVE            PRIMARY_INSTANCE   NORMAL         NO               0 REGULAR         EE

Możemy zmienić ilość zapamiętanych poleceń w historii:

SQL> set history limit 100

Czyszczenie historii :

SQL> history clear

History Cleared

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
INNE POLECENIA SQLCL
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Wyświetlenie aktualnego folderu i jego zmiana

SQL> host echo %cd%

c:\SQLCL\bin

SQL> CD c:\

SQL> host echo %cd%

c:\

SQL> host dir c:\sqlcl\

 Volume in drive C is SYSTEM
 Volume Serial Number is 3838-C044

 Directory of c:\sqlcl

31.10.2017  13:17              .
31.10.2017  13:17              ..
31.10.2017  18:58              bin
31.10.2017  11:15              lib
               0 File(s)              0 bytes
               4 Dir(s)   8 858 349 568 bytes free

SQL> !dir

 Volume in drive C is SYSTEM
 Volume Serial Number is 3838-C044

 Directory of c:\SQLCL\bin

31.10.2017  21:05              .
31.10.2017  21:05              ..
31.10.2017  21:05               449 @skrypt01.sql
31.10.2017  18:58               490 micek.sqlcl
28.09.2017  19:43             6 649 sql
31.10.2017  11:09             2 870 sql.bat
28.09.2017  19:43           546 593 sql.exe
               5 File(s)        557 051 bytes
               2 Dir(s)   8 829 726 720 bytes free

Wyjście „na moment” do sqlcl do systemu windows bez rozłączania się z bazą
SQL> host

Microsoft Windows [Version 10.0.15063]
(c) 2017 Microsoft Corporation. Wszelkie prawa zastrzeżone.


aby wyjść z tego tryby należy wydac polecenie EXIT

Wersja SqlCL

SQL> version lub SQL> show version

Oracle SQLDeveloper Command-Line (SQLcl) version: 17.3.0.256.1818

Informacje o połączeniu z bazą

SQL> show connection

CONNECTION:
 SYSTEM@jdbc:oracle:thin:@192.168.56.103:1521:baza
CONNECTION_IDENTIFIER:
 192.168.56.103:1521:baza
CONNECTION_DB_VERSION:
 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
 With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
NOLOG:
 false
PRELIMAUTH:
 false

SQL> show user

USER is "SYSTEM"

SQL> show login

Glogin possible locations
--------------------

Login possible locations
--------------------
.\
c:\oracle\product\11.2.0\client_1\dbs\

Wyświetlenie nazw wpisanych w pliku TNSNAMES.ORA clienta Oracle

SQL> show tns

TNS Lookup locations
--------------------
1.  USER Home dir
    C:\Users\SQLAdmin
2.  ORACLE_HOME
    c:\oracle\product\11.2.0\client_1\network\admin

Location used:
-------------
        c:\oracle\product\11.2.0\client_1\network\admin

Available TNS Entries
---------------------
AIX_CCWFM1
AIX_CCWFM2
AIX_GSYSDB
------------------------------------------------------------------------AIX_GSYSDB1
AIX_GSYSDB2
AIX_GSYSMART
AIX_GSYSMART
AIX_GSYSMART1
...

Informacje o JDBC

SQL> show jdbc

-- Database Info --
Database Product Name: Oracle
Database Product Version: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
Database Major Version: 12
Database Minor Version: 1
-- Driver Info --
Driver Name: Oracle JDBC driver
Driver Version: 12.2.0.1.0
Driver Major Version: 12
Driver Minor Version: 2
Driver URL: jdbc:oracle:thin:@192.168.56.103:1521:baza
Driver Location:
resource: oracle/jdbc/OracleDriver.class
jar: C:/SQLCL/lib/ojdbc8.jar
JarSize: 4036257
JarDate: Wed Sep 13 19:18:56 CEST 2017
resourceSize: 2604
resourceDate: Tue Dec 13 08:39:48 CET 2016

Aby wyczyścić ekran możemy skorzystać w polecenia CLEAR SCR

SQL> clear

CLEAR
-----
CL[EAR] option

Where option represents one of the following clauses:
     BRE[AKS]
     BUFF[ER]
     COL[UMNS]
     COMP[UTES]
     CONTEXT
     SCR[EEN]
     SQL
     TIMI[NG]

Polecenie to pokazuje listę serwerów do których wykonaliśmy połączenie z SQLCL.

SQL> net

192.168.56.103:1521:baza
192.168.76.46:1521:baza1
192.168.84.111:1526:baza2

SQL> show net

net: ON

Skróty klawiszone używane podczas edycji zapytań SQLCL

Ctrl-a Advance to beginning of current line
Ctrl-e Advance to end of current line
Ctrl-w Advance to beginning of the buffer
Ctrl-s Advance to end of the buffer
Ctrl-r Run your buffer from wherever you are in the editor
ESC Back to the SQL> prompt

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Wyświetlimy tabele schematu HR
SQL> select object_name, object_type, owner from dba_objects where owner like 'HR';

Informacja na temat tabeli HR.REGIONS
SQL> INFO hr.regions

i może bardziej skomplikowana tabela HR.EMPLOYEES
SQL> INFO hr.employees

Ten wpis został opublikowany w kategorii Oracle i oznaczony tagami . Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz