Post

Visualizzazione dei post da 2018

Recover a Dropped Tablespace Using TSPITR

Testato su Oracle 12c. Cancellare un tablespace di un pluggable database e recuperarlo. SQL> show pdbs;     CON_ID CON_NAME                       OPEN MODE  RESTRICTED ---------- ------------------------------ ---------- ----------          2 PDB$SEED                       READ ONLY  NO          3 S12AVA1                        READ WRITE NO          4 S12AVA1_CLONE                  READ WRITE NO SQL> alter session set container=s12ava1; Session altered. SQL> create tablespace tbs_dc datafile '/u01/app/oracle/oradata/CDB12S01/s12ava1/tbs_dc0101' size 500M autoextend on next 50 M maxsize 1024M extent management local autoallocate blocksize 8k segment space management auto; /  Tablespace created. SQL> create user bruce identified by bruce default tablespace tbs_dc account unlock temporary tablespace temp quota unlimited on tbs_dc profile default; User created. SQL> grant connect  to bruce; Grant succeeded. SQL> alter s

ORA-01113: file # needs media recovery

Oracle 12c Supponiamo di voler aprire un pluggable database e termina in errore. SQL> alter pluggable database S12AVA1 open; ERROR at line 1: ORA-01113: file 9 needs media recovery ORA-01110: data file 9: '/u01/app/oracle/oradata/CDB12S01/s12ava1/system01.dbf' SQL> recover datafile 9; ORA-00279: change 3747608 generated at 12/17/2018 10:54:49 needed for thread 1 ORA-00289: suggestion : /u01/app/oracle/archive/CDB12S01/1_92_993571574.dbf ORA-00280: change 3747608 for thread 1 is in sequence #92 Controllare se la sequence 92 e' presente nel Backup, o in locale o nelle directory dei redolog file. Aprire un secondo terminale: RMAN>  list backup of archivelog all; starting full resync of recovery catalog full resync complete List of Backup Sets =================== BS Key  Size       Device Type Elapsed Time Completion Time ------- ---------- ----------- ------------ --------------- 98      105.00M    SBT_TAPE    00:00:05     28-NOV-18         BP Key:

RUOLI - PRIVILEGI

-- Query individuazione dei ruoli select * from dba_roles -- Query utente select * from dba_users   where       username like upper('%&username%') -- Query ruoli associati ad un utente select  *   from  dba_role_privs   where upper (grantee) like upper('%&username%'); Grantee è il nome dell'utente che riceve le grant -- Query privilegi di sistema associat ai ruoli select * from DBA_SYS_PRIVS  where upper (grantee)  in ( 'ROLE_OWNER_SCHEMA', 'ROLE_READ_ONLY','ROLE_READ_WRITE') SELECT * FROM ROLE_SYS_PRIVS  where lower(role) in  ('role_manager','role_submanager'); -- Query privilegi sugli oggetti associat ai ruoli select * from role_tab_privs  where role like 'R_FISC2020_ALL%' -- Query oggetti associat ai ruoli select * from  dba_tab_privs  where granteee like 'R_FISC2020_ALL%' Grantee è il nome dell'utente che riceve le grant SELECT   A.GRANTEE AS UTENTE,          A.GRANTED_ROLE AS RUO

Grant Select su tutte le tabelle di uno schema

Accedere come SYS e creare un user di esempio. create user tizio identified by tizio default tablespace USERS temporary tablespace TEMP PROFILE DEFAULT account unlock; grant connect to tizio; Di seguito la procedura --script_grant_to_all_objects.sql set serveroutput on spool log_script_grant.log prompt ============================ prompt Start script prompt ============================ BEGIN FOR cur IN ( select owner, object_name FROM all_objects where object_type in ('VIEW', 'TABLE','MATERIALIZED VIEW') and owner not in ( select username from dba_users where default_tablespace IN ('SYSAUX', 'TOOLS','TEMP','SYSTEM','CARTPLSQL','DRSYS','XDB')) ) LOOP DBMS_OUTPUT.put_line ('GRANT SELECT ON ' || cur.OWNER || '.' || cur.OBJECT_NAME || ' TO tizio'); EXECUTE IMMED

upgrade RMAN Catalog schema per supportare database oracle 12c

Supponiamo di voler  registrare un database 12c su catalogo RMAN. [oracle@oradb12 admin]$ rman target / catalog rman/xxxxxx@CATDB Recovery Manager: Release 12.2.0.1.0 - Production on Mon Nov 26 14:40:35 2018 Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved. connected to target database: ORCL (DBID=22131311111) connected to recovery catalog database PL/SQL package RMAN.DBMS_RCVCAT version 11.02.00.04 in RCVCAT database is too old RMAN> register database; PL/SQL package RMAN.DBMS_RCVCAT version 11.02.00.04 in RCVCAT database is too old PL/SQL package RMAN.DBMS_RCVCAT version 11.02.00.04 in RCVCAT database is too old RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03002: failure of register command at 11/26/2018 14:42:57 RMAN-06429: RCVCAT database is not compatible with

FLASH\FAST RECOVERY AREA

La FRA (fast o flash recovery area) è una directory del file system utile ad oracle  per gestire backup e recovery. Oracle crea  qui gli archived log e flashback logs se non diversamente specificato. RMAN lo utilizza, se non specificato diversamente,  per salvare i backup piece e image copies  e lo usa durante il recovery. La FRA viene configurata in automatico durante la installazione. Per configurare la FRA: 1) il database in modalità ARCHVIELOG 2) abilitare il logging della flashbak e definire la location che di deafult è $ORACLE_BASE/flash_recovery_area. I parametri obbligatori usati per definire la FRA sono i seguenti SQL> show parameter db_reco NAME                        TYPE              VALUE ---------------------------------------------------------------- db_recovery_file_dest        string       ...\flash_recovery_area db_recovery_file_dest_size    big integer        2G Nell'esempio 2G è il limite di occupazione dell'area dopodiché il sistema si f

ARCHIVELOG mode

Archivelog = Archived Redo log Ogni volta che un redolog file è pieno il processo ARCn - Archiver  process - lo copia in una altra location come un archivio di quel file che può essere mantenuto per un tempo definito dal periodo di retention. I redolog file sono scritti in maniera circolare e quindi per evitare che si sovrascrivi una transazione non ancora scritta da DBW sui datafile, si abilita la modalità ARCHIVELOG che assicura la sovrascrittura dei redolog solo dopo che sono stati archiviati. Verifica se è abilitata la modalità Archivelog  # sqlplus /nolog SQL> conn sys/<pwd> as sysdba SQL> select log_mode from SYS.V$DATABASE; oppure SQL> archive log list; Database log mode                        Archive Mode Automatic archival                        Enabled Archive destination                        /u01/app/oracle/archive/S11TEST1/ Oldest online log sequence            77 Next log sequence to archive         79 Current log sequence                   

FLASHBACK DATA ARCHIVE

Noto anche come Oracle Total Recal. La colonna TUNED_UNDORETENTION della vista V$UNDOSTAT indica per quanto tempo è conservato un undo nel tablespace di riferimento. Questo parametro è visibile anche dalla seguente query: select * from v$parameter where name like '%undo%';  oppure show parameter undo; Di default i parametri di inizializzazione del database sono impostati come segue: UNDO_MANAGEMENT='AUTO' UNDO_TABLESPACE='UNDOTBS1' UNDO_RETENTION=900 (secondi) Dopo quel tempo, i dati di undo sono in stato "expired" e quindi possono essere sovrascritti dal database,  con nuovi dati di undo,  se non c'è spazio nel tablespace undo, a meno che in fase di creazione del  tablespace undo si utilizzi la clausola RETENTION GUARANTEE che assicura che non vengono cancellati i dati di undo "expired" a scapito del fallimento di nuove transazioni .  Per fare questo però occorre creare un flashback data archive. 1) Creare un archivio, a

FLASHBACK DATABASE ante 11.2.0.1 (Restore Point)

Post testato su Oracle 11gR2. Per verificare che sia abilitato eseguire la query seguente. SQL> select FLASHBACK_ON from V$DATABASE; A cosa serve? Serve  per effettuare il restore del db in un certo istante di tempo. Se abilitato, viene attivato un processo di background RVWR e il db genera in automatico nuovi files flashback logs che sono una immagine dei blocchi fisici del database. Il processo RVWR copia questi files nella flash recovery area in una directory chiamata flashback. Ad esempio sotto la directory /home/oracle/rm_flashrecoveryarea/TEST  avremo le seguenti direcorty drwxr-x--- 11 oracle oinstall 4096 Jan 22 00:07 archivelog drwxr-x---  5 oracle oinstall 4096 Jan 20 00:01 autobackup drwxr-x---  5 oracle oinstall 4096 Jan 22 08:20 backupset drwxr-x---  2 oracle oinstall 4096 Jun 10  2013 datafile drwxr-x---  2 oracle oinstall 4096 Jan 22 03:04 flashback Comi si abilita? Il database deve essere  in modalità Archivelog (vedi post  ARCHIVE LOG ) e dev

EXPDP - IMPDP

In ambiente Oracle 11g la directory di default in cui è salvato il file di dump è la seguente. SELECT directory_name, directory_path  FROM dba_directories WHERE directory_name='DATA_PUMP_DIR'; Se si usa una differente directory, specificarla nel parametro DIRECTORY. Esportare sempre  ORACLE_SID e NLS_LANG. Estrarre dalla macchina di destinazione su cui deve essere effettuato l’import il parametro NLS_LANG=<NLS_LANGUAGE>_<NLS_TERRITORY>.<NLS_CHARACTERSET> dalla seguente query. SELECT *   FROM NLS_DATABASE_PARAMETERS where parameter in ('NLS_LANGUAGE', 'NLS_TERRITORY','NLS_CHARACTERSET'); Esportare su entrambi server su cui verrà fatto l’export e l'import la variabile con i parametri di sopra. export NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1 Controllare anche il parametro NLS_NCHAR_CHARACTERSET. Per monitorare l'esecuzione del job select * from DBA_DATAPUMP_JOBS; Export del 5% di uno schema. expdp '&

ALERT LOG

Immagine
E' possibile individuare la posizione dell'alert log con i seguenti comandi. SQL>  select *  from V$DIAG_INFO  where name = 'Diag Trace' ; SQL> show parameter background -- valido anche per ORACLE 10g SQL> select name, value from v$parameter where name like 'background_dump_dest%'; Da sistema operativo Linux eseguire il comando: # f ind / -name  alert_*.log -ls oppure cercare il SID, se già non si conosce, con il comando seguente e poi usare locate. ps -ef | grep pmon oracle    6126     1  0  2017 ?        00:00:35 ora_pmon_<SID> # locate alert_<SID> In Oracle 11g e 12c l'alert log di di testo viene scritto sotto: $ORACLE_BASE/diag/rdbms/<db_name>/<SID>/trace La versione xml è invece sotto $ORACLE_BASE/diag/rdbms/<db_name>/<SID>/alert. Pulizia\cancellazione alert log  L'alert log non va cancellato ma svuotato con il comando seguente. cat /dev/null > alert<SID>.log La seg