środa, 20 maja 2015

Archivelog czyszczenie dzienników

Czyszczenie dzienników

Skrypt sh czyszczenie
#!/bin/bash
find /u01/flash_recovery_area/XE/archivelog/ -type d -mtime +1 | xargs rm -R
$ORACLE_HOME/bin/rman target / @/home/oracle/bin/czysc.sql


skrypt ten oprócz usunięcia starych plików archiwum pozostawia archiwum z dwóch ostatnich dni oraz uruchamia skrypt SQL czysc.sql -który wywala stare wpisy archiwum.

Skrypt SQL czysc

crosscheck backup;
crosscheck archivelog all;
delete noprompt expired archivelog all;
delete noprompt expired backup;
delete noprompt obsolete;
 

W terminalu wpisujemy crontab-e

ustawienia crontab
#W każdą sobotę w nocy o godz 0.30
# usuwanie archivelog
30 0 * * 6 /home/oracle/bin/czyszczenie.sh


lub

# usuwanie archivelog pon-piat godz 23.15
15 23 * * 1-5 /home/oracle/bin/czyszczenie.sh 




Procedura kontroli statu listenerów Oracle problemy z połączeniem się z bazą Oracle



Jeżeli w trakcie pracy  występują błędy w połączeniu z bazą danych należy
sprawdzić:


  • Sprawdzić czy usługi OracleService oraz OracleTNSListener są uruchomione


  • Jeśli usługa jest uruchomiona kolejno można sprawdzić czy baza danych odpowiada poprzez wpisanie w konsoli polecenia tnsping nazwa_instancji (Uwaga !!! polecenie to działa tylko na stanowiskach serwerowych). Nazwa instancji dla klienta Oracle w wersji Express Edition = XE, w przypadku pełnej wersji ustalany podczas instalacji także można sprawdzić czy proces nasłuchu jest uruchomiony poleceniem - lsnrctl


  • Mogą także występować problemy z widocznością w sieci. Należy sprawdzić, czy port domyślnie 1521 ,który obsługuje połączenia sieciowe nie jest blokowany przez Firewall lub inny zainstalowany na komputerze program antywirusowy

wtorek, 19 maja 2015

RMAN podstawy Odtworzenie bazy danych Oracle po awarii



Logowanie

Oprócz poniżej opisywanych metod możemy logować się stosując

do SQLPlus
sqlplus / as sysdba

do RMAN
rman target /


1. Odtworzenie bazy danych Oracle po awarii


Logujemy się do RMAN

rman TARGET SYS/Password NOCATALOG

potem zamykamy bazę i uruchamiamy w trybie mount

RMAN:> shutdown immediate;
RMAN:> startup mount;


przywracamy do stanu z konkretnej daty

RMAN> run
{
allocate channel dev1 type disk;
set until time "to_date('2011-12-30:00:00:00', 'yyyy-mm-dd:hh24:mi:ss')";
restore database;
recover database; }

 
otwieramy bazę resetując dzienniki zdarzeń

RMAN> alter database open resetlogs;

W kolejnym punkcie szczegółowy opis

2. Jak wykonać Backup pełny i różnicowy bazy danych Oracle (XE).

Baza musi być w trybie ARCHIVELOG. Aby to sprawdzić, w jakim trybie
jest baza, należy połączyć się do SQLPlus na konto SYS, wpisując w terminalu

sqlplus sys/haslo as sysdba

wykonujemy zapytanie

SQL> SELECT LOG_MODE FROM SYS.V$DATABASE;

Jeśli baza jest w trybie NOARCHIVELOG, to należy przełączyć ją w tryb ARCHIVELOG:

wykonujemy polecenia

SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
SQL> exit;

wychodzimy z SQLPlus

Przechodzimy do narzędzia RMAN logujemy się na konto SYS

wpisujemy

RMAN

a następnie

RMAN> connect target sys/haslo

Włączenie automatycznych kopii pliku kontrolnego
Kiedy zostanie nawiązane połączenie z bazą należy wykonać

RMAN> configure controlfile autobackup on

Prawidłowe działanie backupu bazy wymaga wykonanie przynajmniej jednego backupu pełnego. Wykonujemy następujące polecenie, przy założeniu, że {path} jest ścieżką do folderu do którego zapisywane będą pliki backupu. Folder taki musimy wcześniej utworzyć w wybranym przez siebie miejscu na dysku.

run {
backup incremental level 0 as compressed backupset
spfile format '{path}/%d_%I_%s_FULL_%U.spfile'
database format '{path}/%d_%I_%s_FULL_%U.database'
plus archivelog delete all input format
'{path}/%d_%I_%s_FULL_%U.archivelog';
backup as compressed backupset current controlfile format
' {path}/%d_%I_%s_FULL_%U.controlfile';
}

Po wykonaniu backupu pełnego możliwe jest wykonywanie backupów różnicowych.
Aby wykonać backup różnicowy musimy w narzędziu RMAN wykonać poniższe polecenie. Podobnie jak w przypadku pełnego {path} jest ścieżką do folderu do którego zapisywane będą pliki backupu.

run {
backup incremental level 1 as compressed backupset
spfile format '{path}/%d_%I_%s_DIFF_%U.spfile'
database format '{path}/%d_%I_%s_DIFF_%U.database'
plus archivelog delete all input format
'{path}/%d_%I_%s_DIFF_%U.archivelog';
backup as compressed backupset current controlfile format
'{path}/%d_%I_%s_DIFF_%U.controlfile';
}

3. Odtwarzanie bazy Oracle (XE) 

Odtworzenie bazy danych z wykonanego backupu, na docelowym hoście musi spełniać następujące warunki konieczne
  • ta sama wersja Oracle, 
  • baza danych musi mieć tę samą nazwę,  
  • struktura wszystkich katalogów bazy danych musi być taka sama jak na oryginalnym hoście.  
  • pliki backupu muszą znajdować w takiej samej ścieżce do której zostały utworzone.

logujemy się na konto SYS i wpisujemy:

RMAN

a następnie:

RMAN> connect target sys/haslo

również możemy zalogować w następujący sposób


RMAN> rman target /

Po zalogowaniu należy wykonywać kolejne polecenia:

RMAN> shutdown immediate;
RMAN> set dbid {DBID};
(parametr DBID widoczny jest po zalogowaniu do bazypoleceniem RMAN)
RMAN> startup force nomount;
 
Następnie przy założeniu, że {SpfilePath}będzie pełną ścieżką do pliku o rozszerzeniu .spfile znajdującego się w folderze {path},najświeższy plik spfile, a{tmp}będzie dowolnym folderem tymczasowym, wykonujemy polecenia:

RMAN> restore spfile to pfile '{tmp}/init.ora'from'{SpfilePath}';RMAN> shutdown immediate;RMAN> startup nomount pfile='{tmp}/init.ora';
 
Następnie przy założeniu, że {ControlfilePath} będzie pełną ścieżką do pliku o rozszerzeniu .controlfile znajdującego się w folderze {path},najświeższy plik controlfile , wykonać polecenia:
 
RMAN> restore controlfile from '{ControlfilePath}';RMAN> alter database mount;
 
Następnie dla każdego pliku w folderze {path}należy wykonać poniższą komendę, wstawiając pod {FilePath} pełną ścieżkę pliku.
 
RMAN> catalog backuppiece '{FilePath}';
 
Następnie należy wykonywać kolejno polecenia:

RMAN> restore database;
RMAN> recover database;
RMAN> sql 'create spfile from pfile';
RMAN> alter database open resetlogs;
RMAN> shutdown immediate;
RMAN> startup;RMAN> exit; 


To już wszystko

wtorek, 25 listopada 2014

Automatic Workload Repository (AWR)

Jedno z narzędzi do diagnostyki wydajności Oracle to Automatic Workload Repository (AWR)

Statystyki wydajnościowe, to dane, opisujące np.:
– działanie systemu
– sesje użytkowników,
– zapytania
– serwisów

Zaczynamy 
Tworzymy repozytorium dla istniejącego schematu np. HR lub możemy stworzyć nowy schemat
Repozytorium AWR stanowi podstawę działania wszystkich mechanizmów automatycznego strojenia
bazy danych.
Parametr DBA_HIST_SNAPSHOT to dane o migawkach bazy danych znajdujących się w repozytorium AWR. Zawierają one identyfikator migawki oraz przedział czasowy, którego ona dotyczy. Domyślnie jest to jedna godzina.

Przyznajemy uprawnienia

grant select on V_$SQL to HR;
grant select on V_$SQL_PLAN to HR;
grant execute on dbms_lock to HR;

cdn..

środa, 17 września 2014

Role predefiniowane

CONNECT,
RESOURCE,
DBA,
EXP_FULL_DATABASE,
IMP_FULL_DATABASE
EXECUTE_CATALOG_ROLE,
DELETE_CATALOG_ROLE,
SELECT_CATALOG_ROLE.


nazwa roli CONNECT nazwa przydzielonego uprawnienia
CREATE CLUSTER
CREATE DATABASE LINK
CREATE SEQUENCE  
CREATE SESSION
CREATE SYNONYM
CREATE TABLE
CREATE VIEW

nazwa roli RESOURCE nazwa przydzielonego uprawnienia
CREATE CLUSTER
CREATE INDEXTYPE
CREATE OPERATOR
CREATE PROCEDURE
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
CREATE TYPE
UNLIMITED TABLESPACE

środa, 10 września 2014

Ekstrakt schema

Ekstrakt schema HR struktura (metadane) i dane tzn wykonamy ekstrakt wszystkie obiekty -tabele, uprawnienia...

W skrypcie został użyty mechanizm DROP usunie gdy istnieją tabele, DELETE usunie gdy istnieją rekordy przed wykonaniem instrukcji INSERT


Link: skrypt do pobrania

Płatnik ZUS usunięcie kontekstu

Jeśli nie używamy kontekstu (Płatnika) możemy go usunąć wraz z jego danymi.
Jest to opcja przydatna głównie dla biur rachunkowych, które nie rozliczają się z danym Płatnikiem przez dłuższy czas.
W ten sposób możemy w bezpiecznie usunąć nadmiar danych występujący w naszej bazie SQL. Przed przystąpieniem wykonania skryptu SQL wykonaj backup bazy.
Z poziomu bazy MS SQL  wykonujemy zapytanie gdzie pole ID_PLATNIK oznacza numer Płatnika

SELECT DISTINCT p.id AS IDENTYFIKATOR, p.nazwaskr AS SYMBOL, p.statuspt, p.STATUS_POTW_W_ZUS, pi.NIP, pi.REGON,
pi.PESEL, pi.NAZWASKR AS PI_NAZWASKR, pi.NAZWISKO, pi.IMIEPIERW,
pi.RODZDOK, pi.SERIANRDOK, pi.DATAURODZ, p.idbiurarach
FROM platnik p LEFT OUTER JOIN platn_ident pi
ON (p.id = pi.id_platnik) WHERE pi.status_dane = 'K' OR pi.status_dane IS NULL

go

Gdy już wiemy którego Płatnika możemy usunąć wykonujemy skrypt, w którym ustalamy numer Płatnika

link skrypt do pobrania