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
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
%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ć.
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ć.
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.
Jak widać na moim testowym Oracl-u mam teraz dwie bazy.