Bazy danych Oracle – ROWNUM i problemy

O czym?
Jak wybrać n rekordów z tabeli, czyli do czego można użyć ROWNUM. W tym poście pokażę również na jakie problemy możemy napotkać korzystając z ROWNUM. Czytaj więcej o ROWNUM

Posted in Oracle SQL Podstawy | Tagged , , | Leave a comment

Parsowanie argumentów w skrypcie

W tym poście, chciałbym poruszyć odwieczny temat argumentów przekazywanych do skryptów. Każdy admin w swojej karierze “popełnia” parę skryptów ułatwiających mu pracę. Niektóre z nich zaczynają żyć własnym życiem i rozpowszechniane są wśród innych adminów…

I tu pojawia się temat… Fajnie by było, aby ich używanie nie odbiegało od standardu w świecie Linux-a. Czytaj więcej

Posted in Oracle DBA Basic | 1 Comment

EXPDP/IMPDP CONSTRAINTS W trybie DATA_ONLY

Witam drogich zainteresowanych,

ostatnio natknałem się na dość oczywisty, choć dopiero po przemyśleniu , przypadek.

Zgodnie z procedurą dodawania węzła do Multi-Master Replication w pierwszym kroku miałem za zadanie odtworzyć strukturę obiektów które będą replikowane. Do tego celu , pomyślałem , że najłatwiej użyć DataPump expdp w trybie exportu METADANYCH.

Stąd na maszynie źródłowej:

expdp system/oracle DIRECTORY=DATA_PUMP_DIR DUMPFILE=junit_t1.dmp CONTENT=METADATA_ONLY SCHEMAS=JUNI INCLUDE=TABLE,INDEX 

A na maszynie docelowej :

impdp userid=system/oracle directory=DATA_PUMP_DIR dumpfile=junit_t1.dmp FULL=Y

Po wykonaniu kolejnych kroków przyszedł czas na wyrównanie danych przed włączeniem replikacji na nowym Master Site (zgodnie z oficjalną procedurą podczas dodawania tabeli replikowanej zawierającej klucz główny) :

Również do tego idealnie nadaje się narzędzie expdp w trybie DATA_ONLY , umożliwiając podanie SCN do którego chcemy uzyskać spójność danych (wymagane przy procedurze dodawania węzła bez wyciszania grupy replikacyjnej)

expdp system/oracle DIRECTORY=DATA_PUMP_DIR SCHEMAS=JUNI DUMPFILE=junit_scn.dmp CONTENT=data_only FLASHBACK_SCN=513950

Na maszynie docelowej:

impdp userid=system/oracle directory=DATA_PUMP_DIR dumpfile=junit_t1.dmp FULL=Y

I tu niespodzianka:

Starting “SYSTEM”.”SYS_IMPORT_FULL_01″:  userid=system/******** directory=DATA_PUMP_DIR dumpfile=junit_t1s2
.dmp FULL=Y
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
ORA-31693: Table data object “JUNIT”.”BONUS” failed to load/unload and is being skipped due to error:
ORA-02291: integrity constraint (JUNIT.BONUS_SAL2_FK) violated – parent key not found

Przyzwyczajony, że podczas normalnych operacji exportu/importu używając narzędzi DataPump nie martwię się o CONSTRAINTY , byłem dość mocno zdziwiony … Czytaj dalej

Posted in Oracle DBA Advanced | Leave a comment

Standby Database w trybie Read Only

Często pada pytanie, jak zachowa się baza standby otworzona w trybie READ ONLY. Jakie mamy zabezpieczenie danych z bazy Primary ?
Sprawa jest ogólnie prosta …

Do wersji 9i, gdy proces recovery był zatrzymany, przesyłane redo-dane były odrzucane.
Informację o tym można znaleźć w alert logu.
Od wersji 10g, sytuacja wygląda zgoła innaczej. Baza standby może być otwarta w trybie do odczytu, proces recovery może być unieruchomiony,
jednak nawet wtedy redo-dane są zapisywane do standby logów (oczywiście po stronie standby).

Po przepełnieniu standby loga lub wymuszeniu przełączenia po stronie primary, taki standby log jest archiwizowany.
Aby zaaplikować dane składowane po stronie standby wystarcza uruchomienie trybu recovery:
SQL> Alter database recover managed standby database using current logfile;
aby dane we wcześniej zarchiwizowanych logach zostały zaaplikowane.

Posted in Oracle DBA Advanced | Leave a comment

Bazy danych Oracle – suma narastająca w SQL

O czym

Jak zrobić sumę narastającą bezpośrednio w języku SQL. Funkcja SUM, analityczna (okienkowa) – jej zapis i składnia oraz efekty użycia. Suma narastająca

Posted in Oracle SQL Zaawansowany, SQL | Tagged , | Leave a comment

Bazy danych Oracle – klauzula CONTINUE

O czym

O klauzuli dodanej w Oracle 11g – służącej do przejścia do kolejnej iteracji

CONTINUE

Klauzula CONTINUE – służy do przejścia do kolejnej iteracji w pętli.

BEGIN    
 FOR licznik IN 1..5 LOOP       
 CONTINUE WHEN Mod(licznik,2)=0;       
 Dbms_Output.put_line(licznik);    
 END LOOP; 
END; 

W powyższym przykładzie w przypadku, gdy licznik będzie podzielny bez reszty przez 2 pętle przejdzie od razu do kolejnej iteracji.

Posted in PL/SQL Podstawy | Tagged , | Leave a comment

Bazy danych Oracle – nowości w wyzwalaczach w 11g

O czym

O nowości w Oracle 11g, która daje możliwość określenia kolejności wykonywania w ramach tego samego punktu wywołania.

 Wyzwalacze w Oracle 11g

W Oracle 10g wymuszenie określonej kolejności (w ramach tego samego punkty wywołania) wymagało połączenia wyzwalaczy.

CREATE TABLE TAB AS SELECT * FROM DUAL;
CREATE TRIGGER on_update1 BEFORE UPDATE ON TAB
BEGIN
   dbms_output.put_line('on_update1');
   dbms_output.put_line('on_update1');
END;

W Oracle 11g wprowadzono klauzulę FOLLOWS, która pozwala określić kolejność wykonywania trigger’ów (przy spełnieniu pewnych wymagań).

CREATE OR REPLACE TRIGGER on_update2  BEFORE UPDATE ON TAB FOLLOWS on_update1
BEGIN
   dbms_output.put_line('on_update2');
END;
/
UPDATE tab SET dummy = dummy;

Klauzula FOLLOWS nie umożliwia wymuszenia kolejności w różnych punktach wywołania – nawet dla wyzwalaczy tego samego typu.

Posted in PL/SQL, PL/SQL Podstawy | Tagged , , | Leave a comment

Oracle Database Gateways

O czym

Jeśli stajesz przed koniecznością połączenia danych z różnych źródeł, potrzebujesz zmigrować informacje, dokonać operacji ETL pomiędzy bazami różnych producentów bądź po prostu zaimportować dane np. z Excela, DB2 czy MySQL do Oracle to Transparent Database Gateways są stworzone właśnie dla Ciebie. Dzięki nim w prosty sposób będziesz mógł zintegrować dane z wielu źródeł, a nawet złączyć je w pojedynczym zapytaniu SQL. Modyfikacja danych w arkuszu Excel z poziomu SQL’a? Zastosowanie grupowania do danych z pliku CSV? Import danych z DB2? Dla Oracle’a żaden problem.

W poniższym artykuje podepniemy arkusz Excel’a do Oracle’a i będziemy go czytać i modyfikować z poziomu SQL’a. Czytaj więcej na Dane z MySQL, DB2, MSSQL, dBase widoczne w Oracle

Posted in Oracle, Oracle DBA Advanced, Oracle SQL | Tagged , , , , | Leave a comment