Create DbNa studiach inżynierski miałem okazje poznać system baz danych Oracle. W tamtym okresie znałem z poprzedniego semestr MySQL jak i przykładałem się do nauki T-SQL. Niestety ,ale Oracle wciąż mnie zaskoczył. Oracle zdecydowanie jest inny niż wszystkie system baz danych.

 

Nie koniecznie słowo „inny” jest tutaj w złym znaczeniu. Oracle oferuje niesamowitą kontrolę nad swoim system. Jest to jednak obusieczny miecz, ponieważ przez to nawet taka prosta czynność jak utworzenie nowej bazy danych wymaga wielu ,ale to wielu kroków.  W SQL Serwerze utworzenie nowej baz wymaga od użytkownika jednego polecenia SQL ,a co wymaga Oracle. Stwórzmy bazę i się przekonajmy.

CMD

Oracle w wersji Express nie oferuje żadnych narzędzi, które by ułatwiły ten proces.  Trochę się pospieszyłem z krytyką ,ale o ile narzędzia istnieją nie zmienia to wciąż faktu ,że nie są one ogólnie dostępne. Oracle nie jest bazą przeznaczoną do nauki SQL. Jeśli kogoś wprowadzamy w świat SQL-a zdecydowanie jest lepiej użyć MySQL lub SQL Server-a.

W tym wpisie stworzę bazę danych w Oracle przy użyciu komend tekstowych. Niestety sprawa nie sprowadza się do polecenia:

CREATE DATABASE test2

Komendy też są zależne od systemu operacyjnego. Co oznacza ,że mój opis jest przeznaczony tylko do użytkowników systemów Windows.

Określenie Instancji SID

Oracle może mieć wiele instancji na jednej maszynie. Każda z tych instancji zarządza inną bazą danych. Do rozróżnienia tych instancji używamy systemowych identyfikatorów (SID).

Czyli jeśli chcemy stworzyć nową baze danych najpierw musimy stworzyć instancje  która będzie tą bazą zarządzał.

SID może być ustawiony poprzez odwołanie się do niego poprzez jego globalną zmienną środowiskową.

set ORACLE_SID=ORA10

image

Na początku  zmieniamy zmienną środowiskową. ORA10 oznacza nazwę przyszłej instancji, jak i bazy.

Tworzenie nowej usługi Oracle

W systemie operacyjnym Windows każda instancja wymaga usługi Windows. Dlatego najpierw musimy stworzyć usługę. Do tego użyjemy polecenia oradim.

oradim -new -sid %ORACLE_SID% -intpwd MYSECRETPASSWORD -startmode M

image 

%ORACLE_SID% nie znajduje się tutaj nie bez przyczyny. W ten sposób mamy 100% pewność ,że nasza nowa usługa nazywa się dokładnie tak samo jak zmienna środowiskowa „ORACLE_SID”.

Usługa została utworzona i uruchomiona. Jej egzystencje łatwo potwierdzić.

image

Oracle utworzył też plik z hasłami dla nowej instancji "PWDORA10.ORA" (PWD<nazwa instancji>.ora). Zawartość tego pliku jest oczywiście zaszyfrowana więc w ten sposób haseł nie można zmieniać.

image

Stworzenie pliku inicjującego

Usługa windowsowa już istnieje ,ale instancja  Oracle jeszcze nie do końca działa. Ciężko to wyjaśnić ,ale usługa Windows i instancje Oracle to nie do końca to samo.

Zanim uruchomimy w pełni instancje Oracle ORA10 musimy najpierw utworzyć plik instancja który określa jak ta instancje powinna być uruchomiona. Plik z hasłami już istnieje ,ale to za mało.

W folderze Oracle\product\11.2.0\server\database\ utwórz plik init<nazwa instancji>.ora

control_files = (c:\oraclexe\app\oracle\product\11.2.0\DBS\control01.ora, 
                 c:\oraclexe\app\oracle\product\11.2.0\DBS\control02.ora, 
                 c:\oraclexe\app\oracle\product\11.2.0\DBS\control03.ora) 
undo_management = auto 
db_name         = ora10 
db_block_size       = 8192

Plik ten naprawdę daję sporą kontrolę nad instancją ORACLE ,ale na potrzeby tego dema plik zawiera tylko najistotniejsze parametry. Mamy tutaj nazwę baz danej oraz jej rozmiar. Każda baza danych potrzebuje przynajmniej jednego pliku kontrolnego. Tutaj zadeklarowałem ich aż trzy. Undo_management pozwala na użycie mechanizmu rollback w danej bazie.

Parametry tutaj się nie kończą. Fajna sprawa dla power usera ,ale na potrzeby edukacyjne już nie tak bardzo.

Teraz gdy mamy ten plik możemy przejść do następnego kroku.

Startowanie instancji

W CMD wygląda to tak:

c:\oraclexe\app\oracle>sqlplus /nolog

SQL*Plus: Release 10.1.0.2.0 - Production on Sat Mar 5 16:05:15 2005 Copyright (c) 1982, 2004, Oracle. All rights reserved.

SQL> connect sys/MYSECRETPASSWORD as sysdba

Connected to an idle instance.

SQLPlus mówi nam ,że połączyliśmy się z instancją ORACLE ORA10 ,ale na razie ta instancja nic nie robi „idle”.

Nie robi ona nic, ponieważ nie jest ona uruchomiona.

Nie ma w tej instancji bazy danych dlatego uruchomiamy tą instancje poleceniem (nomount).

SQL> STARTUP NOMOUNT 
ORACLE instance started. Total System Global Area  146472960 bytes 
Fixed Size                  1382120 bytes 
Variable Size              92277016 bytes 
Database Buffers           50331648 bytes 
Redo Buffers                2482176 bytes 
SQL>

Jeśli plik z parametrami z poprzedniego kroku został utworzony poprawnie instancja zostanie uruchomiona.

Utworzenie bazy danej

W końcu możemy utworzyć bazę danych.

create database ora10
  logfile   group 1 ('c:\oraclexe\app\oracle\product\11.2.0\DBS\redo1.log') size 10M,
            group 2 ('c:\oraclexe\app\oracle\product\11.2.0\DBS\redo2.log') size 10M,
            group 3 ('c:\oraclexe\app\oracle\product\11.2.0\DBS\redo3.log') size 10M
  character set          WE8ISO8859P1
  national character set utf8
  datafile 'c:\oraclexe\app\oracle\product\11.2.0\DBS\system.dbf' 
            size 50M
            autoextend on 
            next 10M maxsize unlimited
            extent management local
  sysaux datafile 'c:\oraclexe\app\oracle\product\11.2.0\DBS\sysaux.dbf' 
            size 10M
            autoextend on 
            next 10M 
            maxsize unlimited
  undo tablespace undo
            datafile 'c:\oraclexe\app\oracle\product\11.2.0\DBS\undo.dbf'
            size 10M
  default temporary tablespace temp
            tempfile 'c:\oraclexe\app\oracle\product\11.2.0\DBS\temp.dbf'
            size 10M;

Kończenie utworzenia bazy danej

Do pełnego ukończenia bazy danej musimy jeszcze uruchomić odpowiednie skrypty.

SQL> @?/rdbms/admin/catalog.sql

SQL> @?/rdbms/admin/catproc.sql

SQLPlus oferuje skrót „?”, który referuje się do głównego folderu z oprogramowaniem Oracle.

catalog.sql tworzy odpowiednie struktury wymaga przez PL/SQL. Przykładowo catalog.sql przygotowuje nową bazę do działania z triggerami.

Odblokowywanie użytkownika

W oknie CMD jesteśmy zalogowani jako użytkownik SYSDBA. Nie możemy z niego korzystać przy normalnym użyciu baz danych dlatego musimy odblokować jakieś konto i nadać mu hasło.

Ja wybrałem użytkownika system.

ALTER USER username ACCOUNT UNLOCK

ALTER USER user_name IDENTIFIED BY new_password;

Teraz możemy zalogować się do nowej bazy danej przy użyciu nowego użytkownika. W programie SQL Developer, który jest zresztą darmowy wystarczy zmienić parametr "SID" na identyfikator swoje nowej bazy.

oracla_CREATE_DATABSAE_06

Jak widać na moim testowym Oracl-u mam teraz dwie bazy.