Oracle DB
- Formatowanie tabeli wyników w CLI SQL*PLUS
- Podłączanie się do backupów networkera i odtworzenie na innym hoście
- Tworzenie nowej instancji bazy danych W DB Oracle w ver >19
- Oracle - Aktualizacja silnika bazy danych oraz klienta
- RMAN - Walidacja oraz wyczyszczenie archiwizacji logów
- Zwiększenie parametru inicjalizującego "PROCESSES"
- Włączanie / wyłączanie zapisywania transakcji do plików redolog.
Formatowanie tabeli wyników w CLI SQL*PLUS
Komendy wpisujemy w aktualnym oknie SQL*Plus, ustawienia są aktywne tylko per sesja. W razie potrzeby stałe ustawienia należy wpisać do qlogin.sql.
Ustawianie szerokości linii:
Jeżeli chcemy ustawić maksymalną liczbę znaków wyświetlanych w jednym wierszu wyników, używamy polecenia:
SET LINESIZE 500
Liczba wierszy na stronę:
SQL*Plus domyślnie powtarza nagłówki tabeli co pewną liczbę wierszy. Możemy to kontrolować za pomocą:
SET PAGESIZE 100
Formatowanie kolumn - szerokość komuny
COLUMN [NAZWAKOLUMNY] FORMAT A52
COLUMN [NazwaKolumnyLiczbowej] FORMAT 999999
FORMAT AXX - Oznacza ilość znaków w nazwie kolumny
FORMAT XXXXXXX (numery) - Oznacza ilość wyświetlonych znaków liczb.
Zmiana nazw nagłówków kolumn
Jeżeli chcemy, aby kolumny miały czytelniejsze bądź inne nagłówki, możemy użyć:
COLUMN [NazwaKolumny] HEADING '[DocelowaNazwyKolumny]'
Alias dla kolumn - formatowanie poprzez AS
Jeżeli chcemy zmienić nazwę kolumny bez ingerencji w nagłówki, możemy użyć aliasu w zapytaniu:
SELECT
[NazwaKolumny] AS "DocelowaNazwaKolumny",
[NazwaKolumny_w_Bajtach]/1024/1024 AS "NazwaKolumny_W_MB",
FROM [NazwaTabeli];
[NazwaKolumny_w_Bajtach]/1024/1024 AS "NazwaKolumny_W_MB" - oznakowanie /1024/1024 wskazuje podwójne podzielenie wartości bajtów poprzez 1024 co daje najpierw kilobajty a później megabajty.
Wyłączenie nagłówków co każdą stronę
Przy większych wynikach, co 10 wierszy SQL*Plus dodaje nagłówki kolumn, co może przeszkadzać w diagnostyce:
SET HEADING ON
SET FEEDBACK OFF
Usuwanie zbędnych "białych" znaków
SQL*Plus domyślnie dodaje spacje na końcu wierszy i używa tabulatorów. Możemy to wyłączyć:
SET TRIMSPOOL ON
SET TAB OFF
Konwersja typu danych
Jest używany, gdy chcemy jawnie określić typ danych kolumny, np. wymusić określoną długość tekstu dla danych typu varchar
CAST(wyrażenie AS nowy_typ)
Dla ułatwienia można przyjąć że wyrażenie to nazwa kolumny, przykład:
CAST(FILE_NAME AS VARCHAR2(52)) AS "Sciezka do pliku"
Pobieranie części tekstu - ucinanie tekstu
Jest używany gdy chcemy całkowicie uciąć kawałek pobieranego tekstu
SUBSTR(tekst, pozycja_startowa, liczba_znaków)
Przykład:
SUBSTR(FILE_NAME, 1, 20) AS "Sciezka do Pliku"
Konwersja liczb i dat na tekst
Jest używany gdy chcemy przekonwertować dany wynik liczbowy na tekst (np. dodać do niego końcówkę jednostki bądź spację)
TO_CHAR(wyrażenie, 'format')
Przykład:
TO_CHAR(bytes/1024/1024, '999999') AS "Size (MB)"
Zmiana separatora kolumn w wynikach
SET COLSEP 'znak'
Przykład:
SET COLSEP ' | '
Przykład wykorzystania formatowania wyników:
SET LINESIZE 500
SET PAGESIZE 50
SET TRIMSPOOL ON
SET TAB OFF
SET WRAP OFF
SET COLSEP ' | '
COLUMN FILE_PATH FORMAT A52 HEADING 'Sciezka do pliku'
COLUMN SIZE_MB FORMAT 999999 HEADING 'Rozmiar pliku w MB'
COLUMN MAX_SIZE_MB FORMAT 999999 HEADING 'Maksymalny rozmiar pliku w MB'
COLUMN AUTO_EXTEND FORMAT A10 HEADING 'Automatyczne powiekszenie pliku'
SELECT
CAST(FILE_NAME AS VARCHAR2(52)) AS "Sciezka do pliku",
bytes/1024/1024 AS "Rozmiar pliku w MB",
maxbytes/1024/1024 AS "Maksymalny rozmiar pliku w MB",
CAST(autoextensible AS VARCHAR2(25)) AS "Automatyczne powiekszenie pliku"
FROM dba_data_files;
Podłączanie się do backupów networkera i odtworzenie na innym hoście
Podpinamy nowy channel do połączenia się z serwerem networkera.
Jako że RMAN nie widzi połączeń sieciowych, będziemy poprzez bibliotekę media library udawali urządzenie SBT TAPE
Najpierw podmieniamy ID bazy danych na tą z docelowego odtworzenia (baza o docelowej nazwie musi istnieć na serwerze docelowym - nawet pusta):
Przed włączeniem rmana:
export NLS_DATE_FORMAT="DD-MM-YYYY HH24:MI:SS"
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/lib64/:${LD_LIBRARY_PATH}
Podpinamy bibliotekę networkera do obsługi SBT_TAPE i oracle
Zmieniamy environment na poprawny oraz logujemy się do rmana:
Wykonujemy zamkniecie bazy danych:
shutdown immediate;
startup nomount
CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' SEND 'NSR_ENV=(NSR_SERVER=snp2004.vm.local,NSR_CLIENT=ewe013.ewepl.local)';
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE 'SBT_TAPE' TO 'ENTIADEV_CONTROLFILE_%F';
By odzyskać controlfile wyłączamy bazę i uruchamiamy jako nomount:
----------- Na serwerze skąd pobieramy dane: ----------
Łączymy się do odpowiedniej bazy poprzez rmana ponieważ:
LIST BACKUP OF CONTROLFILE;
I wybieramy ostatni
RUN {
ALLOCATE CHANNEL CH1 TYPE 'SBT_TAPE';
SEND 'NSR_ENV=(NSR_SERVER=snp2004.vm.local,
NSR_CLIENT=ewe013.ewepl.local)';
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE 'SBT_TAPE' TO 'ENTIADEV_CONTROLFILE_%F';
RESTORE CONTROLFILE FROM 'ENTIADEV_mv3ccnce_1_1';
}
Wykonujemy teraz zmianę ID bazy na docelowym serwerze na ID bazy odwarzanej poprzez:
SET DBID NRXXXXXX
startup mount
Jeżeli ścieżki różnią się pomiędzy serwerami - wykonujemy sprawdzenie na serwerze źródłowym:
SELECT *
FROM DBA_DATA_FILES
ORDER BY FILE_ID;
Porównujemy ze ścieżkami docelowymi i ewentualnie wykonujemy zmiany dla datafiles
RUN {
# Ustaw punkt w czasie, do którego chcemy przywrócić
SET UNTIL TIME "TO_DATE('2024-12-11:06:00:00', 'yyyy-mm-dd:hh24:mi:ss')";
# Mapowanie starych plików na nowe lokalizacje
SET NEWNAME FOR DATAFILE 1 TO '/oracle/db/entiadev/oradata/ENTIADEV/SYSTEM.DBF';
SET NEWNAME FOR DATAFILE 2 TO '/oracle/db/entiadev/oradata/ENTIADEV/SYSAUX.DBF';
SET NEWNAME FOR DATAFILE 3 TO '/oracle/db/entiadev/oradata/ENTIADEV/UNDOTBS1.DBF';
SET NEWNAME FOR DATAFILE 4 TO '/oracle/db/entiadev/oradata/ENTIADEV/USERS.DBF';
SET NEWNAME FOR DATAFILE 5 TO '/oracle/db/entiadev/oradata/ENTIADEV/RAN.DBF';
SET NEWNAME FOR DATAFILE 6 TO '/oracle/db/entiadev/oradata/ENTIADEV/KOLEKTOR.DBF';
SET NEWNAME FOR DATAFILE 7 TO '/oracle/db/entiadev/oradata/ENTIADEV/KOLEKTOR_SMS.DBF';
SET NEWNAME FOR DATAFILE 8 TO '/oracle/db/entiadev/oradata/ENTIADEV/KOLEKTOR_DD.DBF';
SET NEWNAME FOR DATAFILE 9 TO '/oracle/db/entiadev/oradata/ENTIADEV/PROGNOZY.DBF';
SET NEWNAME FOR DATAFILE 9 TO '/oracle/db/entiadev/oradata/ENTIADEV/KOLEKTOR_KEYCLOAK.DBF';
# Przywrócenie bazy danych
RESTORE DATABASE;
#Zmiana nazw na poprawne
SWITCH DATAFILE ALL;
# Odtworzenie bazy danych i usunięcie archiwalnych logów
RECOVER DATABASE;
RELEASE CHANNEL CH1;
}
Na tym etapie mamy odtworzone datafile należy więc zrecoverować baze:
SET UNTIL TIME oczywiście zmieniamy
RUN {
# Ustaw punkt w czasie, do którego chcemy odtworzyć bazę danych
SET UNTIL TIME "TO_DATE('2024-12-11 06:00:00', 'yyyy-mm-dd hh24:mi:ss')";
# Odtworzenie bazy danych z logów archiwalnych do wskazanego punktu
RECOVER DATABASE;
# Ustawienie nowych nazw plików danych (jeśli były zmieniane w czasie restore)
SWITCH DATAFILE ALL;
# Opcjonalne otwarcie bazy w trybie RESETLOGS
ALTER DATABASE OPEN RESETLOGS;
}
Tworzenie nowej instancji bazy danych W DB Oracle w ver >19
Weryfikacja uprawnień w katalogach /oracle/db/ (775)

Oraz weryfikacja uprawnień dla katalogu /tmp (1777)

Do zmiany będziemy potrzebować program xming oraz putty z skonfigurowanym X11 forwarding.

Zalogowanie bezpośrednio na serwer, za pomocą konta oracle jest wymagane dla dobrego przepięcia zmiennej display i możliwości uruchamiania aplikacji graficznych poprzez ssh.
Po zalogowaniu wywołałem Database Configuration Assistant, poprzez komendę dbca




Zweryfikowanie nazwy bazy danych na aktualnie działającym systemie :


Database name oraz sid został zapisany małymi literami, by zgadzał sie z punktami montowania na serwerze. Zrzut jest sprzed tej zmiany.

Utworzenie dwóch sekretów w Secret Serverze oraz wypełnienie okna :

EWE013 - DB - ENTIADEV - system











Usunięcie plików redologów, ponieważ w późniejszych krokach utworzę ję z komend SQL:

I utworzonie tymczasowych redologów o numerach 15 i 16

Zmiana wielkości redologów na 100MB




Po pomyślnym zainstalowaniu bazy danych, połączyłem się sqldeveloperem do instancji entiadev by dodać prawidłowe pliki redologów:
ALTER DATABASE
ADD LOGFILE GROUP 1 ('/oracle/db/entiadev/redoA/redo_g01m1.log', '/oracle/db/entiadev/mredoA/redo_g01m2.log')
SIZE 100M;
ALTER DATABASE
ADD LOGFILE GROUP 2 ('/oracle/db/entiadev/redoB/redo_g02m1.log', '/oracle/db/entiadev/mredoB/redo_g02m2.log')
SIZE 100M;
ALTER DATABASE
ADD LOGFILE GROUP 3 ('/oracle/db/entiadev/redoA/redo_g03m1.log', '/oracle/db/entiadev/mredoA/redo_g03m2.log')
SIZE 100M;
ALTER DATABASE
ADD LOGFILE GROUP 4 ('/oracle/db/entiadev/redoB/redo_g04m1.log', '/oracle/db/entiadev/mredoB/redo_g04m2.log')
SIZE 100M;
ALTER DATABASE
ADD LOGFILE GROUP 5 ('/oracle/db/entiadev/redoA/redo_g05m1.log', '/oracle/db/entiadev/mredoA/redo_g05m2.log')
SIZE 100M;
ALTER DATABASE
ADD LOGFILE GROUP 6 ('/oracle/db/entiadev/redoB/redo_g06m1.log', '/oracle/db/entiadev/mredoB/redo_g06m2.log')
SIZE 100M;

Oraz usunąć „dummy” pliki redologów potrzebnych do instalacji:
SELECT GROUP#, MEMBER, STATUS FROM V$LOGFILE;
ALTER DATABASE DROP LOGFILE GROUP 15;
ALTER DATABASE DROP LOGFILE GROUP 16;
Weryfikacja czy zostały tylko grupy 1-6:

Dla większej czytelności prompta sql, do pliku glogin.sql dodałem :
Dodałem także dodatkowe tablespace o którym była mowa w zgłoszeniu :
https://servicedesk.all-for-one.com/servicecase/881538
CREATE TABLESPACE RAN
DATAFILE '/oracle/db/entiadev/oradata/ENTIADEV/datafile/RAN.dbf' SIZE 1600M;
CREATE TABLESPACE KOLEKTOR
DATAFILE '/oracle/db/entiadev/oradata/ENTIADEV/datafile/KOLEKTOR.dbf' SIZE 1900M;
CREATE TABLESPACE KOLEKTOR_SMS
DATAFILE '/oracle/db/entiadev/oradata/ENTIADEV/datafile/KOLEKTOR_SMS.dbf' SIZE 300M;
CREATE TABLESPACE KOLEKTOR_DD
DATAFILE '/oracle/db/entiadev/oradata/ENTIADEV/datafile/KOLEKTOR_DD.dbf' SIZE 1600M;

Oracle - Aktualizacja silnika bazy danych oraz klienta
- Wykonanie snapshotu maszyny
- Przygotowanie środowiska
- Pobieranie odpowiedniego patcha :
Należy zweryfikować jaki jest aktualny patch do bazy danych oracle oraz do aktualizatora środowiska (program Opatch).
- Logujemy się na stronę supportu oracle
- Po zalogowaniu się wybieramy "Patches & Updates"

- Po prawej stronie wczyta nam się formularz, w którym musimy wybrać "Product or Family (Advanced)":

- Na potrzeby tego poradnika wykorzystujemy silnik bazy oracle w wersji 19c, więc szukamy patcha "DATABASE", wypełniając jak poniżej:
- Interesuje nas "COMBO OF OJVM COMPONENT <version> + DB RU <version> (Patch)", w tym przypadku do wersji 19.24
- Klikamy w numer, po tej akcji klikamy w "download"
- I na samym końcu w nazwę pliku by rozpocząć pobieranie.
"OPatch"
- Aby znaleźć odpowiedni, najnowszy patch aplikacji "OPatch" wyszukiwanie ustawiamy w następujący sposób:

- Klikamy download i pobieramy dany patch.
Wrzucanie patcha poprzez winscp do lokalizacji /install/oracle_patches
- Pobrane wcześniej patche wrzucamy poprzez winscp do lokalizacji /install/oracle_patches. Do folderu "OPatch_repo" wrzucamy paczkę z OPatchem:
Natomiast do folderu "combo_RU_OJVM" patch docelowy dla db:
- Zmiamy ownera paczek na oracle:oinstall, a następnie wykonujemy unzip patchy korzystając z konta "oracle"
- Aktualizacja Środowiska:
Aktualizacja OPatch oraz binariów dotyczy zarówno klienta jak i bazy danych Oracle. Aktualizacje i rekompilacje danych (datapatch) wykonuje się tylko dla bazy danych Oracle.
Aktualizacja OPatch
Usunięcie starego OPatch - rm -rf * z lokalizacji $ORACLE_HOME/OPatch
- Sprawdzamy ścieżkę do aktualnie wykorzystywanej aplikacji OPatch:
- przechodzimy do danej lokalizacji i usuwamy wszystkie pliki:
- Wykopiowanie nowego opatch do $ORACLE_HOME/Opatch z lokalizacji /install/Opatch
- Weryfikujemy poprawnosć aktualizacji poprzez komendę:
opatch version
- Wyłączamy bazy danych - Ważne należy zweryfikować wcześniej czy istnieje tylko jedna instancja, jeżeli nie wyłączamy każdą instancję:
sqlplus / as sysdbashutdown immediate;
Aktualizacja binariów oraz OJVM bazy/klienta:
- Wchodzimy do katalogu patcha bazy danych, znajdują się tam dwa podkatalogi - jeden zawiera patch dla OJVM, a drugi to patch dla samej DB. Należy wejść do każdego katalogu z danym patchem i wykonać poniższą komendę:
opatch apply
- Log który nam się wyświetla warto wyświetlić drugim połączeniem poprzez tail -f "ścieżka"
- Jeżeli wszystko jest w porządku zgadzamy się wpisując "y" i zatwierdzamy enterem
- Potwierdzamy także wyłączenie wszystkich instancji bazy danych:

- Opatch powinien rozpocząć patchowanie:

- Po poprawnym wykonaniu aktualizacji otrzymamy komunikat : OPatch succeded.
4. Weryfikacja aktualizacji
- Startujemy bazę podczas logowania widać już wersję bazy danych podniesioną do 19.24:
sqlplus / as sysdba
startup
- Uruchamiamy Listenera poprzez
lsnrctl start
- Weryfikujemy status listenera poprzez
lsnrctl statusNależy odczekać około minuty :
Po tych działaniach mamy zaktualizowną baze danych, OJVM jak i aktualizator OPatch i możemy przejść do aktualizacji danych:
Przechodzimy do katalogu OPatcha:
Na niektórych serwerach może być zainstalowane więcej niż jedna instancja! Przełączenie między instancjami odbywa się za pomocą polecenia:
. oraenv
Po wykonaniu polecenia zobaczymy w nawiasach kwadratowych aktualnie wybraną instancje. Zmiana instancji następuje poprzez wpisanie nazwy instancji, na którą chcemy się przełączyć
Poniższe kroki wykonujemy każdorazowo dla wszystkich instancji!
Uruchamiamy polecenie datapatch
./datapatch --verbose
Patche powinny zacząć się instalować:
W razie bezproblemowej aktualizacji output powinien wyglądać tak :
Po poprawnym patchowaniu danych logujemy się do bazy danych poprzez:
sqlplus / as sysdba
i weryfikujemy czy wszystkie komponenty są VALID:
select comp_name,version,status from dba_registry where STATUS <> 'VALID';
Bezproblemowy output powinien wyglądać tak:
Należy też zweryfikować wersję:
col comp_id for a10
col VERSION_FULL for a12
col STATUS for a10
col MODIFIED for a21
SELECT comp_ID, version_full, status, modified FROM DBA_REGISTRY;
Uruchamiany :
@?/rdbms/admin/utlrp.sql
output który powinniśmy zobaczyć to :
W razie problemów ze z którymś modułem:
Np dla modułu XDB uruchamiamy walidację:
exec DBMS_REGXDB.VALIDATEXDB;
Może się zdarzyć że schema SYS zablokowała wszystkie statystyki - odblokowujemy za pomocą:
exec dbms_stats.unlock_schema_stats('SYS');
Oraz uruchamiamy ponownie:
exec DBMS_REGXDB.VALIDATEXDB;
@?/rdbms/admin/utlrp.sql
Na koniec ustawiamy z poziomu konta z uprawnieniami roota poprawne uprawnienia dla extjob (aktualizacje może je zmienić, więc lepiej wykonać dla pewności poniższe komendy):
chown root $ORACLE_HOME/bin/extjob
chmod 4750 $ORACLE_HOME/bin/extjob
RMAN - Walidacja oraz wyczyszczenie archiwizacji logów
By sprawdzić aktualnie dostępne archiwa logów wykonujemy komendę:
CROSSCHECK ARCHIVELOG ALL;
Przykładowy output, w momencie braku odpowiednich plików :
Output w momencie gdy pliki są poprawne:
By wyczyścić uszkodzone / brakujące pliki logów z działań RMAN'a należy najpierw zweryfikować istnienie ich komendą powyżej, a później wykonać komendę:
DELETE EXPIRED ARCHIVELOG ALL;
Po weryfikacji, RMAN spyta o usunięcie z aktywnych jobów, wskazane obiekty :
Zgadzamy się, wpisując "y", następnie RMAN usuwa obiekty z listy:
Zwiększenie parametru inicjalizującego "PROCESSES"
Weryfikacja parametrów startowych
Łączymy się do bazy z poziomu usera oracle:
sqlplus / as sysdba
Dla pewności przed tymi zmianami zapisujemy plik startowy SPFILE z aktualnie działającej konfiguracji
CREATE SPFILE FROM PFILE;
exit;
Wyłączamy listener z poziomu basha:
lsnrctl stop NazwaListenera
Logujemy się z powrotem do bazy:
sqlplus / as sysdba
Sprawdzamy aktualne parametry sesji:
show parameter sessions;
Sprawdzamy aktualne parametry processów:
show parameter processes;
Sprawdzemy aktualne parametry transakcji:
show parameter transactions;
Ważne jest by w momencie powiększenia parametrów maksymalnej ilości procesów ("PROCESSES") Powiększyć także parametry powiązane: "sessions oraz "transactions"
Parametry oblicza się następująco:
processes=x
sessions=x*1.1+5
transactions=sessions*1.1
Gdzie X to liczba procesów jaką chcemy wpisać w konfigurację
Edycja parametrów startowych
Parametry startowe nie mogą być zmienione na działającej bazie (online), zapisuje się je do pliku startowego spfile po czym restartuje bazę
alter system set processes=LiczbaProcesów scope=spfile;
alter system set sessions=LiczbaSesji scope=spfile;
alter system set transactions=LiczbaTransakcji scope=spfile;
shutdown immediate;
startup
Uruchamiamy listener z poziomu basha:
lsnrctl start NazwaListenera
Włączanie / wyłączanie zapisywania transakcji do plików redolog.
Wszystkie komendy uruchamiamy z SQL*Plus zalogowanym kontem jako sysdba
Sprawdzenie parametrów logowania
select name,force_logging from v$database;
Włączanie logowania transakcji do plików
alter database force logging;
Wyłączanie logowania do plików
alter database no force logging;


























































