diff --git a/clienti/oracle-xe-21c/depanare-ora-12954-spatiu.md b/clienti/oracle-xe-21c/depanare-ora-12954-spatiu.md new file mode 100644 index 0000000..f4d6b39 --- /dev/null +++ b/clienti/oracle-xe-21c/depanare-ora-12954-spatiu.md @@ -0,0 +1,266 @@ +# ORA-12954: Database size exceeds 12 GB limit (Oracle XE) + +Oracle XE are limita hard de 12 GB. Limita se aplica pe **suma datafile-urilor** (dba_data_files), NU pe segmente (dba_segments). Un datafile poate fi 90% gol dar tot conteaza la limita. + +## Diagnostic rapid + +```sql +-- IMPORTANT: Verifica AMBELE - segmente vs datafiles +-- Segmente (spatiu efectiv folosit) +SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024) AS used_mb +FROM dba_segments GROUP BY tablespace_name ORDER BY used_mb DESC; + +-- Datafiles (spatiu ALOCAT - asta conteaza la limita de 12 GB!) +SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024) AS allocated_mb +FROM dba_data_files GROUP BY tablespace_name ORDER BY allocated_mb DESC; + +SELECT ROUND(SUM(bytes)/1024/1024) AS total_allocated_mb FROM dba_data_files; + +-- Ce ocupa SYSAUX (de obicei vinovatul) +SELECT occupant_name, ROUND(space_usage_kbytes/1024) AS size_mb +FROM v$sysaux_occupants ORDER BY space_usage_kbytes DESC; + +-- Top 20 segmente mari in SYSAUX +SELECT segment_name, segment_type, ROUND(bytes/1024/1024) AS size_mb +FROM dba_segments WHERE tablespace_name = 'SYSAUX' +ORDER BY bytes DESC FETCH FIRST 20 ROWS ONLY; + +-- Identifica LOB-uri mari +SELECT owner, table_name, column_name +FROM dba_lobs +WHERE segment_name = ''; + +-- Audit policies active (trebuie dezactivate!) +SELECT policy_name, enabled_option FROM audit_unified_enabled_policies; + +-- Auto tasks (sql tuning advisor = vinovatul principal) +SELECT client_name, status FROM dba_autotask_client; +``` + +## Pas 1: Cleanup segmente (elibereaza spatiu in datafile) + +### SQL Tuning Sets (principalul vinovat, poate ocupa 5+ GB) + +```sql +-- Incearca mai intai DROP curat +BEGIN + FOR r IN (SELECT name, owner FROM dba_sqlset) LOOP + BEGIN + DBMS_SQLTUNE.DROP_SQLSET(r.name, r.owner); + EXCEPTION WHEN OTHERS THEN NULL; + END; + END LOOP; +END; +/ + +-- Daca DROP nu elibereaza spatiul, TRUNCATE direct: +TRUNCATE TABLE sys.wri$_sqlset_plan_lines; +TRUNCATE TABLE sys.wri$_sqlset_plans; +TRUNCATE TABLE sys.wri$_sqlset_statistics; +TRUNCATE TABLE sys.wri$_sqlset_statements; +TRUNCATE TABLE sys.wri$_sqlset_references; +TRUNCATE TABLE sys.wri$_sqlset_definitions; +``` + +### Advisor + AWR + Statistici + +```sql +EXEC DBMS_ADVISOR.DELETE_EXPIRED_TASKS; +-- NOTA: retention trebuie >= moving window baseline (default 8 zile) +-- Daca da ORA-13541, creste retention la 8*24*60 +EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60); +EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7); +EXEC DBMS_STATS.PURGE_STATS(SYSDATE - 7); +PURGE DBA_RECYCLEBIN; +``` + +## Pas 2: Resize datafiles (recupereaza spatiul alocat) + +TRUNCATE elibereaza segmentele dar datafile-ul ramane la aceeasi dimensiune. Trebuie RESIZE. + +```sql +-- Verifica path-urile fisierelor +SELECT file_id, tablespace_name, ROUND(bytes/1024/1024) AS size_mb, file_name +FROM dba_data_files ORDER BY bytes DESC; + +-- Gaseste minimul posibil de resize +SELECT file_id, CEIL((MAX(block_id + blocks - 1) * 8192) / 1048576) + 10 AS min_size_mb +FROM dba_extents WHERE tablespace_name = 'SYSAUX' GROUP BY file_id; + +-- Resize +ALTER DATABASE DATAFILE '' RESIZE M; +``` + +### Daca resize esueaza cu ORA-03297 (used data beyond resize value) + +Segmentele sunt imprastiate in datafile. Pe Oracle XE 21c nu exista SHRINK_TABLESPACE (doar 23ai+). + +**Solutie UNDOTBS1** (testat, functioneaza): +```sql +-- Seteaza undo pe MANUAL temporar +ALTER SYSTEM SET undo_management = 'MANUAL' SCOPE = SPFILE; + +-- Restart PDB +ALTER SESSION SET CONTAINER = CDB$ROOT; +ALTER PLUGGABLE DATABASE XEPDB1 CLOSE IMMEDIATE; +ALTER PLUGGABLE DATABASE XEPDB1 OPEN RESTRICTED; +ALTER SESSION SET CONTAINER = XEPDB1; + +-- Drop si recreare +DROP TABLESPACE UNDOTBS1 INCLUDING CONTENTS AND DATAFILES; + +CREATE UNDO TABLESPACE UNDOTBS1 DATAFILE '\UNDOTBS01.DBF' SIZE 100M AUTOEXTEND ON MAXSIZE 500M; +ALTER SYSTEM SET undo_tablespace = 'UNDOTBS1'; +ALTER SYSTEM SET undo_management = 'AUTO' SCOPE = SPFILE; + +-- Restart PDB normal +ALTER SESSION SET CONTAINER = CDB$ROOT; +ALTER PLUGGABLE DATABASE XEPDB1 CLOSE IMMEDIATE; +ALTER PLUGGABLE DATABASE XEPDB1 OPEN; +``` + +**Solutie SYSAUX** (daca resize cu ORA-03297): +SYSAUX nu se poate face drop/recreare. Singura solutie este **recrearea PDB-ului**: +1. Export complet (scheme + obiecte SYS custom) +2. Drop PDB +3. Recreare PDB din PDB$SEED +4. Import + +Scripturi de export/import disponibile in directorul `import/`. +Scriptul master: `import/recreare_pdb.sql` + +## Pas 3: Preventie (IMPORTANT - ruleaza pe orice server nou!) + +```sql +-- Dezactiveaza auto tasks care umfla SYSAUX +EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'sql tuning advisor', operation => NULL, window_name => NULL); +EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto space advisor', operation => NULL, window_name => NULL); +SELECT client_name, status FROM dba_autotask_client; + +-- AWR retention (min 8 zile din cauza moving window baseline) +EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60); +EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7); + +-- Dezactiveaza audit policies (umfla AUDSYS) +NOAUDIT POLICY ORA_SECURECONFIG; +NOAUDIT POLICY ORA_LOGON_FAILURES; +SELECT policy_name, enabled_option FROM audit_unified_enabled_policies; +``` + +## AUDSYS (audit trail) + +Cleanup-ul via `DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL` esueaza cu ORA-12954 cand baza e plina (chiar si in restricted mode). Dezactiveaza audit policies **preventiv** pe orice server nou: + +```sql +NOAUDIT POLICY ORA_SECURECONFIG; +NOAUDIT POLICY ORA_LOGON_FAILURES; +SELECT policy_name, enabled_option FROM audit_unified_enabled_policies; +-- Ar trebui sa returneze: no rows selected +``` + +## Tablespace USERS + +PDB-ul nou creat din PDB$SEED NU are tablespace USERS. Obiectele care erau pe USERS pe serverul vechi trebuie remapate la import: + +```cmd +impdp "sys/PAROLA_SYS@XEPDB1 AS SYSDBA" directory=DMPDIR dumpfile=schema.dmp logfile=schema.log remap_tablespace=USERS:ROA +``` + +## Grant-uri pe DIRECTORY-uri + +Sintaxa corecta pentru grant-uri pe Oracle DIRECTORY objects: + +```sql +-- CORECT: +GRANT READ, WRITE ON DIRECTORY DMPDIR TO CONTAFIN_ORACLE; + +-- GRESIT (ORA-00942): +GRANT READ ON SYS.DMPDIR TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.DMPDIR TO CONTAFIN_ORACLE; -- EXECUTE nu e valid pe DIRECTORY +``` + +## DBMS_LOCK pe Oracle XE 21c + +Pe Oracle XE 21c, `SYS.DBMS_LOCK` necesita grant explicit: + +```sql +GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE; +``` + +Fara acest grant, pachetele care folosesc `sys.dbms_lock.sleep()` dau `PLS-00201`. + +## impdp/expdp AS SYSDBA pe Windows + +Pe Windows CMD, `AS SYSDBA` trebuie inclus in ghilimele escaped: + +```cmd +-- CORECT: +impdp "sys/PAROLA@XEPDB1 AS SYSDBA" directory=DMPDIR dumpfile=schema.dmp logfile=schema.log + +-- GRESIT (interpretat ca argument separat): +impdp sys/PAROLA@XEPDB1 AS SYSDBA directory=DMPDIR dumpfile=schema.dmp logfile=schema.log +``` + +## User SYSTEM pe PDB nou + +SYSTEM e common user — nu poate fi unlock/modificat doar pe un PDB. Trebuie din CDB$ROOT: + +```sql +ALTER SESSION SET CONTAINER = CDB$ROOT; +ALTER USER SYSTEM IDENTIFIED BY "ParolaNoua" ACCOUNT UNLOCK; +``` + +Alternativ, foloseste SYS AS SYSDBA pentru impdp (recomandat). + +## Datafile path explicit + +La CREATE TABLESPACE pe Oracle XE 21c, trebuie specificat path-ul complet: + +```sql +-- CORECT: +CREATE TABLESPACE ROA DATAFILE 'C:\APP\...\ORADATA\XE\XEPDB1\ROA01.DBF' SIZE 2048M AUTOEXTEND ON NEXT 100M MAXSIZE 6G; + +-- GRESIT (ORA-02236: invalid file name): +CREATE TABLESPACE ROA DATAFILE SIZE 2048M AUTOEXTEND ON NEXT 100M MAXSIZE 6G; +``` + +Gaseste path-ul corect: +```sql +SELECT file_name FROM dba_data_files WHERE ROWNUM = 1; +``` + +## Verificare mod undo (local vs shared) + +```sql +-- Din CDB$ROOT +SELECT property_value FROM database_properties WHERE property_name = 'LOCAL_UNDO_ENABLED'; +``` + +## Rezultate tipice + +### Dupa cleanup (fara recreare PDB) + +| Componenta | Inainte | Dupa cleanup | +|-----------|---------|-------------| +| SYSAUX segmente | 7.5 GB | 1.9 GB | +| SYSAUX datafile | 7.8 GB | 7.8 GB (fara resize) / 2.5 GB (cu resize) | +| UNDOTBS1 | 2.1 GB | 0.1 GB (dupa recreare) | +| Total alocat | 13.5 GB | 4.5 GB (cu recreare UNDO) | + +### Dupa recreare PDB (solutia definitiva) + +| Componenta | Inainte | Dupa recreare PDB | +|-----------|---------|-------------------| +| SYSAUX | 7.8 GB | 390 MB | +| SYSTEM | - | 370 MB | +| ROA | - | 2 GB | +| UNDOTBS1 | 2.1 GB | 165 MB | +| **Total alocat** | **13.5 GB** | **~3 GB** | + +## Lectii invatate + +1. **TRUNCATE vs DROP pe SQL Tuning Sets**: DROP nu elibereaza spatiul LOB-ului. TRUNCATE functioneaza. +2. **Limita 12 GB = dba_data_files, nu dba_segments**: Chiar daca segmentele ocupa 4.5 GB, datafile-urile alocate conteaza. +3. **SYSAUX nu se poate shrink**: ORA-03297 la orice valoare cand segmentele sunt la high water mark. Singura solutie = recreare PDB. +4. **AWR retention >= moving window baseline**: Default baseline = 8 zile. Nu poti seta retention < 8 zile fara a reduce baseline-ul (care nu exista ca procedura pe XE 21c). +5. **Audit policies active pe PDB nou**: PDB-ul creat din PDB$SEED vine cu ORA_SECURECONFIG si ORA_LOGON_FAILURES active. Dezactiveaza-le imediat. diff --git a/clienti/oracle-xe-21c/import/01_tablespaces.sql b/clienti/oracle-xe-21c/import/01_tablespaces.sql new file mode 100644 index 0000000..eb2abb8 --- /dev/null +++ b/clienti/oracle-xe-21c/import/01_tablespaces.sql @@ -0,0 +1,6 @@ +-- 01_tablespaces.sql +-- Create custom tablespaces +-- Source: backup/11_tablespaces.sql + +-- NOTA: Ajusteaza path-ul daca Oracle Home e diferit +CREATE TABLESPACE ROA DATAFILE 'C:\APP\EXT_MMUTU\PRODUCT\21C\ORADATA\XE\XEPDB1\ROA01.DBF' SIZE 2048M AUTOEXTEND ON NEXT 100M MAXSIZE 6G; diff --git a/clienti/oracle-xe-21c/import/02_useri.sql b/clienti/oracle-xe-21c/import/02_useri.sql new file mode 100644 index 0000000..f1fabd6 --- /dev/null +++ b/clienti/oracle-xe-21c/import/02_useri.sql @@ -0,0 +1,13 @@ +-- 02_useri.sql +-- Create application users +-- Source: backup/10_useri.sql + +CREATE USER "CONTAFIN_ORACLE" IDENTIFIED BY "ROMFASTSOFT" + DEFAULT TABLESPACE "ROA" + TEMPORARY TABLESPACE "TEMP"; +/ + +CREATE USER "ROMPETROLE" IDENTIFIED BY "ROMFASTSOFT" + DEFAULT TABLESPACE "ROA" + TEMPORARY TABLESPACE "TEMP"; +/ diff --git a/clienti/oracle-xe-21c/import/03_directories.sql b/clienti/oracle-xe-21c/import/03_directories.sql new file mode 100644 index 0000000..c7a1433 --- /dev/null +++ b/clienti/oracle-xe-21c/import/03_directories.sql @@ -0,0 +1,61 @@ +-- 03_directories.sql +-- Create Oracle directories +-- Source: backup/04_directories.sql + +CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR'; +CREATE OR REPLACE DIRECTORY SCHEDULER$_LOG_DIR AS 'C:\app\ext_mmutu\product\21c\homes\OraDB21Home1\scheduler\log'; +CREATE OR REPLACE DIRECTORY UPD_COMUNROA AS 'C:\ROAUPDATE\_ARHIVE\COMUNROA'; +CREATE OR REPLACE DIRECTORY UPD_ROAAPROV AS 'C:\ROAUPDATE\_ARHIVE\ROAAPROV'; +CREATE OR REPLACE DIRECTORY UPD_ROAAUTO AS 'C:\ROAUPDATE\_ARHIVE\ROAAUTO'; +CREATE OR REPLACE DIRECTORY UPD_ROABAVERT AS 'C:\ROAUPDATE\_ARHIVE\ROABAVERT'; +CREATE OR REPLACE DIRECTORY UPD_ROACASA AS 'C:\ROAUPDATE\_ARHIVE\ROACASA'; +CREATE OR REPLACE DIRECTORY UPD_ROACOMENZI AS 'C:\ROAUPDATE\_ARHIVE\ROACOMENZI'; +CREATE OR REPLACE DIRECTORY UPD_ROACONIMPORT AS 'C:\ROAUPDATE\_ARHIVE\ROACONIMPORT'; +CREATE OR REPLACE DIRECTORY UPD_ROACONSTRUCTII AS 'C:\ROAUPDATE\_ARHIVE\ROACONSTRUCTII'; +CREATE OR REPLACE DIRECTORY UPD_ROACONT AS 'C:\ROAUPDATE\_ARHIVE\ROACONT'; +CREATE OR REPLACE DIRECTORY UPD_ROACONTRACTE AS 'C:\ROAUPDATE\_ARHIVE\ROACONTRACTE'; +CREATE OR REPLACE DIRECTORY UPD_ROADECL AS 'C:\ROAUPDATE\_ARHIVE\ROADECL'; +CREATE OR REPLACE DIRECTORY UPD_ROADEF AS 'C:\ROAUPDATE\_ARHIVE\ROADEF'; +CREATE OR REPLACE DIRECTORY UPD_ROADEFSALARII AS 'C:\ROAUPDATE\_ARHIVE\ROADEFSALARII'; +CREATE OR REPLACE DIRECTORY UPD_ROADEPOZIT AS 'C:\ROAUPDATE\_ARHIVE\ROADEPOZIT'; +CREATE OR REPLACE DIRECTORY UPD_ROADEVIZE AS 'C:\ROAUPDATE\_ARHIVE\ROADEVIZE'; +CREATE OR REPLACE DIRECTORY UPD_ROAFACTURARE AS 'C:\ROAUPDATE\_ARHIVE\ROAFACTURARE'; +CREATE OR REPLACE DIRECTORY UPD_ROAFURNIZORI AS 'C:\ROAUPDATE\_ARHIVE\ROAFURNIZORI'; +CREATE OR REPLACE DIRECTORY UPD_ROAGEN AS 'C:\ROAUPDATE\_ARHIVE\ROAGEN'; +CREATE OR REPLACE DIRECTORY UPD_ROAGEST AS 'C:\ROAUPDATE\_ARHIVE\ROAGEST'; +CREATE OR REPLACE DIRECTORY UPD_ROAGRESTAURANT AS 'C:\ROAUPDATE\_ARHIVE\ROAGRESTAURANT'; +CREATE OR REPLACE DIRECTORY UPD_ROAHOTEL AS 'C:\ROAUPDATE\_ARHIVE\ROAHOTEL'; +CREATE OR REPLACE DIRECTORY UPD_ROAHOTELCONFIG AS 'C:\ROAUPDATE\_ARHIVE\ROAHOTELCONFIG'; +CREATE OR REPLACE DIRECTORY UPD_ROAIMOB AS 'C:\ROAUPDATE\_ARHIVE\ROAIMOB'; +CREATE OR REPLACE DIRECTORY UPD_ROAINCHIDSAL AS 'C:\ROAUPDATE\_ARHIVE\ROAINCHIDSAL'; +CREATE OR REPLACE DIRECTORY UPD_ROALUCRARI AS 'C:\ROAUPDATE\_ARHIVE\ROALUCRARI'; +CREATE OR REPLACE DIRECTORY UPD_ROAMANAGER AS 'C:\ROAUPDATE\_ARHIVE\ROAMANAGER'; +CREATE OR REPLACE DIRECTORY UPD_ROAMASINI AS 'C:\ROAUPDATE\_ARHIVE\ROAMASINI'; +CREATE OR REPLACE DIRECTORY UPD_ROANOR AS 'C:\ROAUPDATE\_ARHIVE\ROANOR'; +CREATE OR REPLACE DIRECTORY UPD_ROANORFRUVIMED AS 'C:\ROAUPDATE\_ARHIVE\ROANORFRUVIMED'; +CREATE OR REPLACE DIRECTORY UPD_ROANORRENAV AS 'C:\ROAUPDATE\_ARHIVE\ROANORRENAV'; +CREATE OR REPLACE DIRECTORY UPD_ROANORUTMIDIA AS 'C:\ROAUPDATE\_ARHIVE\ROANORUTMIDIA'; +CREATE OR REPLACE DIRECTORY UPD_ROAOBINV AS 'C:\ROAUPDATE\_ARHIVE\ROAOBINV'; +CREATE OR REPLACE DIRECTORY UPD_ROAOFERTARE AS 'C:\ROAUPDATE\_ARHIVE\ROAOFERTARE'; +CREATE OR REPLACE DIRECTORY UPD_ROAPRETURI AS 'C:\ROAUPDATE\_ARHIVE\ROAPRETURI'; +CREATE OR REPLACE DIRECTORY UPD_ROAPRINT AS 'C:\ROAUPDATE\_ARHIVE\ROAPRINT'; +CREATE OR REPLACE DIRECTORY UPD_ROAPRINT_INITIALIZARI AS 'C:\ROAUPDATE\_ARHIVE\ROAPRINT_INITIALIZARI'; +CREATE OR REPLACE DIRECTORY UPD_ROAPRODAGR AS 'C:\ROAUPDATE\_ARHIVE\ROAPRODAGR'; +CREATE OR REPLACE DIRECTORY UPD_ROAPRODUCTIE AS 'C:\ROAUPDATE\_ARHIVE\ROAPRODUCTIE'; +CREATE OR REPLACE DIRECTORY UPD_ROAREGISTRATURA AS 'C:\ROAUPDATE\_ARHIVE\ROAREGISTRATURA'; +CREATE OR REPLACE DIRECTORY UPD_ROAREPARTIZSAL AS 'C:\ROAUPDATE\_ARHIVE\ROAREPARTIZSAL'; +CREATE OR REPLACE DIRECTORY UPD_ROARES AS 'C:\ROAUPDATE\_ARHIVE\ROARES'; +CREATE OR REPLACE DIRECTORY UPD_ROARESTAURANT AS 'C:\ROAUPDATE\_ARHIVE\ROARESTAURANT'; +CREATE OR REPLACE DIRECTORY UPD_ROARETAIL AS 'C:\ROAUPDATE\_ARHIVE\ROARETAIL'; +CREATE OR REPLACE DIRECTORY UPD_ROARETAILMON AS 'C:\ROAUPDATE\_ARHIVE\ROARETAILMON'; +CREATE OR REPLACE DIRECTORY UPD_ROASAL AS 'C:\ROAUPDATE\_ARHIVE\ROASAL'; +CREATE OR REPLACE DIRECTORY UPD_ROASALSPEC AS 'C:\ROAUPDATE\_ARHIVE\ROASALSPEC'; +CREATE OR REPLACE DIRECTORY UPD_ROASITFIN AS 'C:\ROAUPDATE\_ARHIVE\ROASITFIN'; +CREATE OR REPLACE DIRECTORY UPD_ROASITOP AS 'C:\ROAUPDATE\_ARHIVE\ROASITOP'; +CREATE OR REPLACE DIRECTORY UPD_ROASTART AS 'C:\ROAUPDATE\_ARHIVE\ROASTART'; +CREATE OR REPLACE DIRECTORY UPD_ROASUPORT AS 'C:\ROAUPDATE\_ARHIVE\ROASUPORT'; +CREATE OR REPLACE DIRECTORY UPD_ROATELCOMM AS 'C:\ROAUPDATE\_ARHIVE\ROATELCOMM'; +CREATE OR REPLACE DIRECTORY UPD_ROATELMON AS 'C:\ROAUPDATE\_ARHIVE\ROATELMON'; +CREATE OR REPLACE DIRECTORY UPD_ROAUPDATE AS 'C:\ROAUPDATE'; +CREATE OR REPLACE DIRECTORY UPD_ROAVIN AS 'C:\ROAUPDATE\_ARHIVE\ROAVIN'; +CREATE OR REPLACE DIRECTORY UPD_USERREPORTS AS 'C:\ROAUPDATE\_ARHIVE\USERREPORTS'; diff --git a/clienti/oracle-xe-21c/import/04_sys_tables.sql b/clienti/oracle-xe-21c/import/04_sys_tables.sql new file mode 100644 index 0000000..4454801 --- /dev/null +++ b/clienti/oracle-xe-21c/import/04_sys_tables.sql @@ -0,0 +1,57 @@ +-- 04_sys_tables.sql +-- Create SYS custom tables and sequence +-- Source: backup/06_sys_tables.sql + +CREATE TABLE "SYS"."AUTH_DETALII" + ( "DETALII" VARCHAR2(15) NOT NULL ENABLE + ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 + NOCOMPRESS LOGGING + STORAGE(INITIAL 16384 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 + PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 + BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) + TABLESPACE "SYSTEM"; +/ + +CREATE TABLE "SYS"."AUTH_SERII" + ( "ID_SERIE" NUMBER(5,0) NOT NULL ENABLE, + "ID_PROGRAM" NUMBER(5,0) NOT NULL ENABLE, + "SERIE" RAW(128) NOT NULL ENABLE, + "STERS" NUMBER(1,0) DEFAULT 0 NOT NULL ENABLE, + "DATAORA" DATE DEFAULT sysdate NOT NULL ENABLE, + "ID_UTIL" NUMBER(5,0) NOT NULL ENABLE, + "DATAORAS" DATE, + "ID_UTILS" NUMBER(5,0), + CONSTRAINT "PK_AUTH_SERII" PRIMARY KEY ("ID_SERIE") + USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS + STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 + PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 + BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) + TABLESPACE "SYSTEM" ENABLE + ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 + NOCOMPRESS LOGGING + STORAGE(INITIAL 16384 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 + PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 + BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) + TABLESPACE "SYSTEM"; +/ + +CREATE TABLE "SYS"."INFO" + ( "INFO" CLOB, + "DATAORA" TIMESTAMP (6) DEFAULT SYSTIMESTAMP, + "LOCATIA" VARCHAR2(200) + ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 + NOCOMPRESS LOGGING + STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 + PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 + BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) + TABLESPACE "SYSTEM" + LOB ("INFO") STORE AS BASICFILE ( + TABLESPACE "SYSTEM" ENABLE STORAGE IN ROW 4000 CHUNK 8192 RETENTION + NOCACHE LOGGING + STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 + PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 + BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)); +/ + +CREATE SEQUENCE "SYS"."SEQ_AUTH_SERII" MINVALUE 1 MAXVALUE 99999999999999999 INCREMENT BY 1 START WITH 37 NOCACHE NOORDER NOCYCLE NOKEEP NOSCALE GLOBAL; +/ diff --git a/clienti/oracle-xe-21c/import/05_sys_code_objects.sql b/clienti/oracle-xe-21c/import/05_sys_code_objects.sql new file mode 100644 index 0000000..84e245d --- /dev/null +++ b/clienti/oracle-xe-21c/import/05_sys_code_objects.sql @@ -0,0 +1,955 @@ +-- 05_sys_code_objects.sql +-- Create SYS custom code objects (packages, procedures, functions) +-- Source: backup/05_sys_code_objects.sql +-- Note: UTL_MAIL and UTL_MAIL_INTERNAL excluded (Oracle built-in) + +-- ============================================================================ +-- AUTH_PACK Package Specification +-- ============================================================================ +CREATE OR REPLACE NONEDITIONABLE PACKAGE "SYS"."AUTH_PACK" is + + -- Author : MARIUS.ATANASIU + -- Created : 11/5/2005 9:58:27 AM + -- Purpose : + + procedure verifica_program; + + procedure verifica_licenta(v_sid IN NUMBER, v_program IN VARCHAR2); + procedure verifica_licenta_luna(v_an IN NUMBER, + v_luna IN NUMBER, + v_tip IN NUMBER); + procedure verifica_numar_firme; + + procedure adauga_serie(V_ID_PROGRAM IN NUMBER, + V_SERIE IN VARCHAR2, + V_ID_UTILAD IN NUMBER); + + procedure sterge_serie(V_ID_PROGRAM IN NUMBER, V_ID_UTILS IN NUMBER); + + procedure verifica_serie(V_ID_PROGRAM IN NUMBER, V_SERIE IN RAW); + + function selecteaza_serie(V_ID_PROGRAM IN NUMBER) return varchar2; + + function selecteaza_nr_util(V_ID_PROGRAM IN NUMBER) return number; + + function selecteaza_data_val(V_ID_PROGRAM IN NUMBER) return date; + + function decripteaza_serie(V_ID_PROGRAM IN NUMBER, + V_SERIE IN RAW, + V_DATAORA IN DATE) return varchar2; + + function decripteaza_nr_util(V_SERIEC IN VARCHAR2) return number; + + function decripteaza_data_val(V_SERIEC IN VARCHAR2, V_ZI IN VARCHAR2) + return date; + + function hextodec(V_HEXA IN VARCHAR2) return number; + + function dectohex(V_NUMAR IN NUMBER) return varchar2; + +end AUTH_PACK; +/ + +-- ============================================================================ +-- AUTH_PACK Package Body +-- ============================================================================ +CREATE OR REPLACE NONEDITIONABLE PACKAGE BODY "SYS"."AUTH_PACK" is + -- versiune 2025-01-14-01 + + ------------------------------------------------------------------------------ + -- ISTORIC MODIFICARI: + -- 2025-01-14: Migrare Oracle 10g -> Oracle 21c Express + -- - Inlocuit DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt cu DBMS_CRYPTO.DECRYPT + -- - Folosit ENCRYPT_3DES_2KEY (cheie 16 bytes) + CHAIN_CBC + PAD_ZERO + -- - Modificari in: decripteaza_serie() + ------------------------------------------------------------------------------ + + procedure verifica_program is + v_program VARCHAR2(256); + v_modul VARCHAR2(256); + v_sid NUMBER(16); + begin + begin + SELECT sid, UPPER(TRIM(program)), UPPER(TRIM(module)) + INTO v_sid, v_program, v_modul + FROM v$session + WHERE audsid = USERENV('SESSIONID') + AND audsid != 0 + AND rownum = 1 + AND STATUS <> 'KILLED'; +PINFO('1 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH'); + + IF v_program not in ('ROASTART.EXE', + 'PLSQLDEV.EXE', + 'ROAGEN.EXE', + 'ROASUPORT.EXE', + 'EXPDP.EXE', + 'IMPDP.EXE', + 'APSNET_WP.EXE', + 'W3WP.EXE', + 'RUBY.EXE', + 'SQLPLUS.EXE', + 'TASKS.EXE', + 'VFP9.EXE', + 'ROAEFACTURA.EXE', + 'WEBDEV.WEBSERVER.EXE', + 'ROA2COCACOLA.EXE') and + user not in ('SYS', + 'SYSTEM', + 'DBSNMP', + 'CTXSYS', + 'MDSYS', + 'DIP', + 'SYSMAN', + 'WMSYS') THEN +PINFO('2 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH'); + IF v_program <> v_modul THEN + RAISE_APPLICATION_ERROR(-20000, 'Acces interzis!'); + END IF; +PINFO('3 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH'); + IF NOT V_PROGRAM LIKE 'ORACLE%' THEN + auth_pack.verifica_licenta(v_sid, v_program); + END IF; +PINFO('4 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH'); + END IF; + exception + when NO_DATA_FOUND then + v_program := Null; + end; + + end; + ------------------------------------------------------------------------------------- + -- VERIFICA_LICENTA + -- LA LOGIN IN BAZA DE DATE SE VERIFICA DACA ESTE LICENTA PENTRU PROGRAM, SI PENTRU NUMARUL DE UTILIZATORI PE PROGRAM DUPA IP + procedure verifica_licenta(v_sid IN NUMBER, v_program IN VARCHAR2) is + + v_serie VARCHAR2(256); + v_seriec VARCHAR2(256); + v_nr_util NUMBER(5); + v_utilizatori NUMBER(5); + v_nume_program SYN_NOM_PROGRAME.DENUMIRE%TYPE; + v_id_program CONTAFIN_ORACLE.NOM_PROGRAME.ID_PROGRAM%TYPE; + v_dataora DATE; + v_data_val DATE; + v_zi VARCHAR2(2); + + begin + V_NUME_PROGRAM := TRIM(REPLACE(v_program, '.EXE')); + begin + SELECT A.ID_PROGRAM, B.SERIE, B.DATAORA + INTO V_ID_PROGRAM, V_SERIE, V_DATAORA + FROM SYN_NOM_PROGRAME A + LEFT JOIN AUTH_SERII B + ON A.ID_PROGRAM = B.ID_PROGRAM + WHERE UPPER(TRIM(A.DENUMIRE)) = V_NUME_PROGRAM + AND B.STERS = 0; + + exception + WHEN NO_DATA_FOUND THEN +PINFO('1 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH2'); + RAISE_APPLICATION_ERROR(-20000, + 'Nu aveti licenta pentru ' || + V_NUME_PROGRAM || '!' || CHR(13) || CHR(10) || + ' Licenta poate fi introdusa prin programul ROASUPORT!'); + end; +PINFO('2 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH2'); + v_zi := LPAD(extract(day from v_dataora), 2, '0'); + v_seriec := auth_pack.decripteaza_serie(v_id_program, + v_serie, + v_dataora); + v_utilizatori := auth_pack.decripteaza_nr_util(v_seriec); + v_data_val := auth_pack.decripteaza_data_val(v_seriec, v_zi); + + IF v_utilizatori > 0 THEN + -- numar cate ip-uri (client_info) distincte cu programul v_program sunt conectate + -- exceptand ip-ul curent + -- astfel se poate conecta de pe acelasi ip, cu acelasi program de mai multe ori + -- fara sa conteze la numarul utilizatorilor conectati + SELECT COUNT(DISTINCT client_info) + INTO v_nr_util + FROM v$session + WHERE UPPER(TRIM(PROGRAM)) = v_program + AND SID != v_sid + and status <> 'KILLED' + and nvl(client_info, 'x') <> sys_context('userenv', 'ip_address'); + + IF v_nr_util >= v_utilizatori THEN + RAISE_APPLICATION_ERROR(-20000, + 'Ati depasit numarul de licente (' || + v_utilizatori || ') pentru programul ' || + v_nume_program || ' !' || CHR(13) || + CHR(10) || + ' Licenta poate fi reinnoita prin programul ROASUPORT!'); + END IF; + ELSE + RAISE_APPLICATION_ERROR(-20000, + 'Seria introdusa pentru acest program nu este corecta!' || + CHR(13) || CHR(10) || + ' Licenta poate fi modificata prin programul ROASUPORT!'); + END IF; + PINFO('3 LOGIN ' || V_PROGRAM || ' USER ' || USER, 'SYS.AUTH2'); + end; + ------------------------------------------------------------------------------------- + -- VERIFICA_LICENTA_LUNA + -- LA DESCHIDEREA DE LUNA NOUA SE VERIFICA DACA ESTE LICENTA PENTRU LUNA NOUA (TRIGGER LA INSERT INTO CALENDAR) + procedure verifica_licenta_luna(v_an IN NUMBER, + v_luna IN NUMBER, + v_tip IN NUMBER) is + + v_serie VARCHAR2(256); + v_seriec VARCHAR2(256); + v_nume_program1 SYN_NOM_PROGRAME.DENUMIRE%TYPE := 'ROASTART'; + v_nume_program2 SYN_NOM_PROGRAME.DENUMIRE%TYPE := 'ROASAL'; + v_id_program CONTAFIN_ORACLE.NOM_PROGRAME.ID_PROGRAM%TYPE; + v_dataora DATE; + v_data_val DATE; + v_zi VARCHAR2(2); + + begin + begin + SELECT A.ID_PROGRAM, B.SERIE, B.DATAORA + INTO V_ID_PROGRAM, V_SERIE, V_DATAORA + FROM SYN_NOM_PROGRAME A + LEFT JOIN AUTH_SERII B + ON A.ID_PROGRAM = B.ID_PROGRAM + WHERE UPPER(TRIM(A.DENUMIRE)) = + DECODE(V_TIP, 1, V_NUME_PROGRAM1, 2, V_NUME_PROGRAM2, 'XYZ') + -- daca parametrul nu e 1 sau 2, atunci trebuie sa dea eroare + AND B.STERS = 0; + + exception + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu aveti licenta pentru deschiderea de luna noua!' || + CHR(13) || CHR(10) || + ' Licenta poate fi introdusa prin programul ROASUPORT!'); + end; + + v_zi := LPAD(extract(day from v_dataora), 2, '0'); + v_seriec := auth_pack.decripteaza_serie(v_id_program, + v_serie, + v_dataora); + v_data_val := auth_pack.decripteaza_data_val(v_seriec, v_zi); + + IF v_data_val < TO_DATE(v_an || v_luna, 'YYYYMM') THEN + RAISE_APPLICATION_ERROR(-20000, + 'Licenta pentru acest program a expirat!' || + CHR(13) || CHR(10) || + ' Licenta poate fi reinnoita prin programul ROASUPORT!'); + END IF; + + end; + ------------------------------------------------------------------------------------- + -- VERIFICA_NUMAR_FIRME + -- LA CREAREA UNEI FIRME NOI SE VERIFICA DACA SE DEPASESTE NUMARUL DE FIRME DIN LICENTA + procedure verifica_numar_firme is + + v_serie VARCHAR2(256); + v_seriec VARCHAR2(256); + v_nume_program SYN_NOM_PROGRAME.DENUMIRE%TYPE := 'ROASTART'; + v_id_program CONTAFIN_ORACLE.NOM_PROGRAME.ID_PROGRAM%TYPE; + v_dataora DATE; + V_NR_MAX_FIRME NUMBER(10) := 0; + V_NR_FIRME NUMBER(10) := 0; + + begin + begin + SELECT A.ID_PROGRAM, B.SERIE, B.DATAORA + INTO V_ID_PROGRAM, V_SERIE, V_DATAORA + FROM SYN_NOM_PROGRAME A + LEFT JOIN AUTH_SERII B + ON A.ID_PROGRAM = B.ID_PROGRAM + WHERE UPPER(TRIM(A.DENUMIRE)) = V_NUME_PROGRAM + AND B.STERS = 0; + + exception + WHEN NO_DATA_FOUND THEN + RAISE_APPLICATION_ERROR(-20000, + 'Nu aveti licenta pentru deschiderea unei firme noi!' || + CHR(13) || CHR(10) || + ' Licenta poate fi introdusa prin programul ROASUPORT!'); + end; + + v_seriec := auth_pack.decripteaza_serie(v_id_program, + v_serie, + v_dataora); + V_NR_MAX_FIRME := auth_pack.decripteaza_nr_util(V_SERIEC); + + SELECT COUNT(*) + INTO V_NR_FIRME + FROM SYN_NOM_FIRME + WHERE STERS = 0 + AND NVL(ID_MAMA, 0) = 0; + + IF V_NR_FIRME >= V_NR_MAX_FIRME THEN + RAISE_APPLICATION_ERROR(-20000, + 'Aveti licenta pentru maxim ' || + V_NR_MAX_FIRME || ' firme (' || V_NR_FIRME || + ' firme deja definite)!' || CHR(13) || + CHR(10) || + ' Licenta poate fi introdusa prin programul ROASUPORT!'); + END IF; + + end; + ------------------------------------------------------------------------------------- + procedure adauga_serie(V_ID_PROGRAM IN NUMBER, + V_SERIE IN VARCHAR2, + V_ID_UTILAD IN NUMBER) is + V_ID_SERIE AUTH_SERII.ID_SERIE%TYPE; + V_SERIER AUTH_SERII.SERIE%TYPE; + eroare_de_conversie EXCEPTION; + PRAGMA EXCEPTION_INIT(eroare_de_conversie, -6502); + begin + BEGIN + V_SERIER := HEXTORAW(V_SERIE); + EXCEPTION + WHEN eroare_de_conversie THEN + RAISE_APPLICATION_ERROR(-20000, 'Aceasta serie nu este valida!'); + END; + + auth_pack.verifica_serie(V_ID_PROGRAM, V_SERIER); + + SELECT SEQ_AUTH_SERII.NEXTVAL INTO V_ID_SERIE FROM DUAL; + + INSERT INTO AUTH_SERII + (ID_SERIE, ID_PROGRAM, SERIE, ID_UTIL) + VALUES + (V_ID_SERIE, V_ID_PROGRAM, V_SERIER, V_ID_UTILAD); + + end; + ------------------------------------------------------------------------------------- + procedure sterge_serie(V_ID_PROGRAM IN NUMBER, V_ID_UTILS IN NUMBER) is + begin + UPDATE AUTH_SERII + SET STERS = 1, ID_UTILS = V_ID_UTILS, DATAORAS = SYSDATE + WHERE ID_PROGRAM = V_ID_PROGRAM + AND STERS = 0; + end; + ------------------------------------------------------------------------------------- + function selecteaza_serie(V_ID_PROGRAM IN NUMBER) return varchar2 is + V_SERIE AUTH_SERII.SERIE%TYPE; + V_SERIEC VARCHAR2(256); + eroare_de_conversie EXCEPTION; + PRAGMA EXCEPTION_INIT(eroare_de_conversie, -6502); + begin + begin + SELECT SERIE + INTO V_SERIE + FROM AUTH_SERII + WHERE ID_PROGRAM = V_ID_PROGRAM + AND STERS = 0; + exception + when NO_DATA_FOUND then + V_SERIE := NULL; + end; + + BEGIN + V_SERIEC := TRIM(RAWTOHEX(V_SERIE)); + EXCEPTION + WHEN eroare_de_conversie THEN + V_SERIEC := NULL; + END; + + return V_SERIEC; + end; + ------------------------------------------------------------------------------------- + function selecteaza_nr_util(V_ID_PROGRAM IN NUMBER) return number is + V_SERIE AUTH_SERII.SERIE%TYPE; + V_DATAORA DATE; + V_NR_UTILIZATORI NUMBER(4); + V_SERIEC VARCHAR2(64); + begin + begin + SELECT SERIE, DATAORA + INTO V_SERIE, V_DATAORA + FROM AUTH_SERII + WHERE ID_PROGRAM = V_ID_PROGRAM + AND STERS = 0; + + V_SERIEC := auth_pack.decripteaza_serie(V_ID_PROGRAM, + V_SERIE, + V_DATAORA); + + V_NR_UTILIZATORI := auth_pack.decripteaza_nr_util(V_SERIEC); + + exception + when NO_DATA_FOUND then + V_NR_UTILIZATORI := 0; + end; + + return V_NR_UTILIZATORI; + end; + ------------------------------------------------------------------------------------- + function selecteaza_data_val(V_ID_PROGRAM IN NUMBER) return date is + V_SERIE AUTH_SERII.SERIE%TYPE; + V_DATAORA DATE; + V_DATA_VAL DATE; + V_SERIEC VARCHAR2(64); + V_ZI VARCHAR2(2); + begin + begin + + SELECT SERIE, DATAORA + INTO V_SERIE, V_DATAORA + FROM AUTH_SERII + WHERE ID_PROGRAM = V_ID_PROGRAM + AND STERS = 0; + + V_SERIEC := auth_pack.decripteaza_serie(V_ID_PROGRAM, + V_SERIE, + V_DATAORA); + V_ZI := LPAD(EXTRACT(DAY FROM V_DATAORA), 2, '0'); + V_DATA_VAL := auth_pack.decripteaza_data_val(V_SERIEC, V_ZI); + + exception + when NO_DATA_FOUND then + V_DATA_VAL := NULL; + end; + + return V_DATA_VAL; + end; + ------------------------------------------------------------------------------------- + procedure verifica_serie(V_ID_PROGRAM IN NUMBER, V_SERIE IN RAW) is + v_seriedec VARCHAR2(256); + v_checksum NUMBER(2); + v_suma NUMBER(2) := 0; + begin + v_seriedec := auth_pack.decripteaza_serie(V_ID_PROGRAM, + V_SERIE, + SYSDATE); + + v_checksum := auth_pack.hextodec(substr(v_seriedec, + length(v_seriedec), + 1)); + for i in 1 .. length(v_seriedec) - 1 loop + v_suma := v_suma + auth_pack.hextodec(substr(v_seriedec, i, 1)); + end loop; + + if MOD(v_suma + v_checksum, 16) <> 0 then + RAISE_APPLICATION_ERROR(-20000, 'Seria introdusa nu este valida!'); + end if; + + end; + ------------------------------------------------------------------------------------- + function decripteaza_serie(V_ID_PROGRAM IN NUMBER, + V_SERIE IN RAW, + V_DATAORA IN DATE) return varchar2 is + v_denumire CONTAFIN_ORACLE.NOM_PROGRAME.DENUMIRE%TYPE; + v_id_client NUMBER(4); + v_cheie RAW(16); + v_serieval RAW(256); + v_seriedec VARCHAR2(32); + v_valoare NUMBER(2); + eroare_de_conversie EXCEPTION; + PRAGMA EXCEPTION_INIT(eroare_de_conversie, -6502); + begin + IF V_SERIE IS NOT NULL THEN + SELECT substr(a.denumire, 4, 5) + INTO V_DENUMIRE + FROM SYN_NOM_PROGRAME A + WHERE A.ID_PROGRAM = V_ID_PROGRAM; + + SELECT TO_NUMBER(DETALII) INTO V_ID_CLIENT FROM AUTH_DETALII; + + v_cheie := utl_raw.cast_to_raw(RPAD(LPAD(v_id_program, 3, '0') || + LPAD(v_id_client, 4, '0') || + RPAD(v_denumire, 5, CHR(4)) || + LPAD(to_char(v_dataora, 'IWYY'), 4, '0'), + 16, + 'X')); + + -- Inlocuit DBMS_OBFUSCATION_TOOLKIT.DES3Decrypt cu DBMS_CRYPTO.DECRYPT + -- ENCRYPT_3DES_2KEY pentru chei de 16 bytes, PAD_ZERO pentru compatibilitate + v_serieval := DBMS_CRYPTO.DECRYPT( + src => v_serie, + typ => DBMS_CRYPTO.ENCRYPT_3DES_2KEY + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_ZERO, + key => v_cheie + ); + + begin + for i in 1 .. length(v_serieval) / 2 loop + v_valoare := to_number(substr(v_serieval, 2 * i - 1, 2)); + if v_valoare > 40 then + v_seriedec := v_seriedec || auth_pack.dectohex(v_valoare - 31); + else + v_seriedec := v_seriedec || (v_valoare - 30); + end if; + end loop; + exception + when eroare_de_conversie then + RAISE_APPLICATION_ERROR(-20100, + 'Seria introdusa nu este valida!'); + end; + + ELSE + v_seriedec := NULL; + END IF; + + RETURN v_seriedec; + end; + ------------------------------------------------------------------------------------- + function decripteaza_nr_util(V_SERIEC IN VARCHAR2) return number is + begin + IF V_SERIEC IS NOT NULL THEN + return to_number(substr(v_seriec, 1, 4)); + ELSE + return 0; + END IF; + end; + ------------------------------------------------------------------------------------- + function decripteaza_data_val(V_SERIEC IN VARCHAR2, V_ZI IN VARCHAR2) + return date is + v_luna varchar2(2); + begin + IF V_SERIEC IS NOT NULL THEN + v_luna := LPAD(auth_pack.hextodec(substr(v_seriec, 5, 1)), 2, '0'); + return last_day(to_date(v_luna || substr(v_seriec, 6, 2), 'MMYY')); + ELSE + return null; + END IF; + end; + ------------------------------------------------------------------------------------- + function hextodec(V_HEXA IN VARCHAR2) return number is + v_numar NUMBER(2); + begin + IF ASCII(UPPER(TRIM(V_HEXA))) BETWEEN 48 AND 57 or + ASCII(UPPER(TRIM(V_HEXA))) BETWEEN 65 AND 70 THEN + CASE UPPER(TRIM(V_HEXA)) + WHEN 'A' THEN + v_numar := 10; + WHEN 'B' THEN + v_numar := 11; + WHEN 'C' THEN + v_numar := 12; + WHEN 'D' THEN + v_numar := 13; + WHEN 'E' THEN + v_numar := 14; + WHEN 'F' THEN + v_numar := 15; + ELSE + v_numar := to_number(V_HEXA); + END CASE; + ELSE + RAISE_APPLICATION_ERROR(-20000, 'Caracterul nu este valid!'); + END IF; + return v_numar; + end; + ------------------------------------------------------------------------------------- + function dectohex(V_NUMAR IN NUMBER) return varchar2 is + v_hexa VARCHAR2(1); + begin + CASE v_numar + WHEN 10 THEN + v_hexa := 'A'; + WHEN 11 THEN + v_hexa := 'B'; + WHEN 12 THEN + v_hexa := 'C'; + WHEN 13 THEN + v_hexa := 'D'; + WHEN 14 THEN + v_hexa := 'E'; + WHEN 15 THEN + v_hexa := 'F'; + ELSE + v_hexa := to_char(V_NUMAR); + END CASE; + return v_hexa; + end; + +end AUTH_PACK; +/ + +-- ============================================================================ +-- PINFO Procedure (wrapped) +-- ============================================================================ +CREATE OR REPLACE NONEDITIONABLE PROCEDURE "SYS"."PINFO" wrapped +a000000 +b2 +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +7 +d3 e7 +upTW3dK2OWquAE9qYLTPkR2RYpwwgy7cmJ5qfHSKimRQCVrK0lt6JkrTw376tMBrXqprtSRs +3F59wMZSKNEfsiHE5qU4k/VLyE0GHVQOHroHCu1lLnCoJ2cL5HuwV1l13q9vshqVV+HqW8iZ +4r37EyYRJSuaK2nFOQuUu7mgwop/p/KVn2UAnzh9V6+tJBW2C4yS2jO/C9ISABHyfhn3R8gS +6w/fw6l4/Q== +/ + +-- ============================================================================ +-- NEWSCHEMA Procedure +-- ============================================================================ +CREATE OR REPLACE NONEDITIONABLE PROCEDURE "SYS"."NEWSCHEMA" (tcSchema varchar2, + tnLuna number, + tnAn number) is + lcCommand varchar2(1000); + + lcSchemaSursa VARCHAR2(100) := 'FIRMANOUA'; + lcSchemaDestinatie VARCHAR2(100) := tcSchema; + lcDumpFile VARCHAR2(100); + lcDumpDir VARCHAR2(100) := 'DMPDIR'; + -- lnCount number(10); + + lcSql varchar2(1000); + lnAn number := tnAn; + lnLuna number := tnLuna; + ldDataI date; + ldDataF date; + lnZileLucratoare number(10) := 0; + lnOreLucratoare number(10) := 0; + lnMaxAn number(10); + lcLocatie varchar2(100) := 'CREARE FIRMA ' || tcSchema; + + h1 NUMBER; -- Data Pump job handle + ind NUMBER; -- Loop index + percent_done NUMBER; -- Percentage of job complete + job_state VARCHAR2(30); -- To keep track of job state + le ku$_LogEntry; -- For WIP and error messages + js ku$_JobStatus; -- The job status from get_status + -- jd ku$_JobDesc; -- The job description from get_status + sts ku$_Status; -- The status object returned by get_status +begin + ------------------------------------------------------------------------ + -- CREATE THE USER + ------------------------------------------------------------------------ + /* SELECT COUNT(1) + INTO lnCount + FROM dba_users + WHERE username = UPPER(tcSchema); + + IF lnCount <> 0 THEN + EXECUTE IMMEDIATE ('DROP USER ' || tcSchema || ' CASCADE'); + END IF;*/ + + lcCommand := 'create user ' || tcSchema || ' identified by ' || CASE + WHEN upper(tcSchema) like 'TEST%' THEN + '"123"' + ELSE + 'ROMFASTSOFT' + END || ' default tablespace ROA + temporary tablespace TEMP + profile DEFAULT'; + pinfo(lcCommand, lcLocatie); + execute immediate lcCommand; + + ------------------------------------------------------------------------ + -- GRANT PRIVILEGIES + ------------------------------------------------------------------------ + lcCommand := 'grant connect to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant resource to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant create materialized view to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant create procedure to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant create sequence to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant create table to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant create trigger to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant create type to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant create view to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant debug connect session to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant select any table to ' || tcSchema; + execute immediate lcCommand; + lcCommand := 'grant unlimited tablespace to ' || tcSchema; + execute immediate lcCommand; + + ------------------------------------------------------------------------ + -- IMPORT DUMP + ------------------------------------------------------------------------ + -- Create a (user-named) Data Pump job to do a "full" import (everything + -- in the dump file without filtering). + + lcDumpFile := lcSchemaSursa || '.dmp'; + + -- h1 := DBMS_DATAPUMP.OPEN('IMPORT', 'SCHEMA', NULL, lcSchemaDestinatie); + h1 := DBMS_DATAPUMP.OPEN('IMPORT', 'SCHEMA', NULL, lcSchemaDestinatie); + + -- Specify the single dump file for the job (using the handle just returned) + -- and directory object, which must already be defined and accessible + -- to the user running this procedure. This is the dump file created by + -- the export operation in the first example. + + -- DBMS_DATAPUMP.ADD_FILE(h1, lcDumpFile, lcDumpDir); + + BEGIN + PINFO('DBMS_DATAPUMP.ADD_FILE LOG', lcLocatie); + DBMS_DATAPUMP.ADD_FILE(handle => h1, + filename => lcSchemaDestinatie || '.log', + directory => 'DMPDIR', + filetype => 3); + + PINFO('DBMS_DATAPUMP.ADD_FILE DMP', lcLocatie); + DBMS_DATAPUMP.ADD_FILE(handle => h1, + filename => lcDumpFile, + directory => lcDumpDir, + filetype => 1); + + -- A metadata remap will map all schema objects from HR to BLAKE. + PINFO('DBMS_DATAPUMP.METADATA_REMAP', lcLocatie); + DBMS_DATAPUMP.METADATA_REMAP(h1, + 'REMAP_SCHEMA', + lcSchemaSursa, + lcSchemaDestinatie); + + -- If a table already exists in the destination schema, skip it (leave + -- the preexisting table alone). This is the default, but it does not hurt + -- to specify it explicitly. + + DBMS_DATAPUMP.SET_PARAMETER(h1, 'TABLE_EXISTS_ACTION', 'SKIP'); + + -- Start the job. An exception is returned if something is not set up properly. + + PINFO('DBMS_DATAPUMP.START_JOB', lcLocatie); + DBMS_DATAPUMP.START_JOB(h1); + + ------------------------------------------------------------------------ + -- The import job should now be running. In the following loop, the job is + -- monitored until it completes. In the meantime, progress information is + -- displayed. Note: this is identical to the export example. + + percent_done := 0; + job_state := 'UNDEFINED'; + while (job_state != 'COMPLETED') and (job_state != 'STOPPED') loop + dbms_datapump.get_status(h1, + dbms_datapump.ku$_status_job_error + + dbms_datapump.ku$_status_job_status + + dbms_datapump.ku$_status_wip, + -1, + job_state, + sts); + js := sts.job_status; + + -- If the percentage done changed, display the new value. + + if js.percent_done != percent_done then + pinfo('*** Job percent done = ' || to_char(js.percent_done), + lcLocatie); + percent_done := js.percent_done; + end if; + + -- If any work-in-progress (WIP) or Error messages were received for the job, + -- display them. + + if (bitand(sts.mask, dbms_datapump.ku$_status_wip) != 0) then + le := sts.wip; + else + if (bitand(sts.mask, dbms_datapump.ku$_status_job_error) != 0) then + le := sts.error; + else + le := null; + end if; + end if; + if le is not null then + ind := le.FIRST; + while ind is not null loop + -- dbms_output.put_line(le(ind).LogText); + pinfo(le(ind).LogText, lcLocatie); + ind := le.NEXT(ind); + end loop; + end if; + end loop; + + -- Indicate that the job finished and gracefully detach from it. + -- dbms_output.put_line('Job has completed'); + pinfo('Job has completed', lcLocatie); + + -- dbms_output.put_line('Final job state = ' || job_state); + pinfo('Final job state = ' || job_state, + 'CREARE FIRMA ' || lcSchemaDestinatie); + + ------------------------------------------------------------------------ + -- POST IMPORT + + -- 1. actualizare calendar, sal_calendar, cote_tva + -- CALENDAR + lcSql := 'UPDATE ' || lcSchemaDestinatie || + '.CALENDAR SET ANUL = :1, LUNA = :2, AN = TO_CHAR(:3), NL = LPAD(:4, 2, ''0'')'; + PINFO(lcSql, lcLocatie); + EXECUTE IMMEDIATE lcSql + USING lnAn, lnLuna, lnAn, lnLuna; + + -- SAL_CALENDAR + ldDataI := TO_DATE(lpad(lnAn, 4, '0') || lpad(lnLuna, 2, '0'), 'YYYYMM'); + ldDataF := ADD_MONTHS(ldDataI, 1) - 1; + lcSql := 'select ' || lcSchemaDestinatie || + '.pack_personal.calculeaza_nr_zile(:1, :2) FROM DUAL'; + EXECUTE IMMEDIATE lcSql + INTO lnZileLucratoare + USING ldDataI, ldDataF; + lnOreLucratoare := lnZileLucratoare * 8; + + lcSql := 'UPDATE ' || lcSchemaDestinatie || + '.SAL_CALENDAR SET AN = :1 , LUNA = :2, ZILELUC = :3, ORESTAS = :4, ORELUC = :5'; + PINFO(lcSql, lcLocatie); + EXECUTE IMMEDIATE lcSql + USING lnAn, lnLuna, lnZileLucratoare, lnOreLucratoare, lnOreLucratoare; + + -- SAL_IMPOZITAR + lcSql := 'UPDATE ' || lcSchemaDestinatie || + '.SAL_IMPOZITAR SET AN = :1 , LUNA = :2'; + PINFO(lcSql, lcLocatie); + EXECUTE IMMEDIATE lcSql + USING lnAn, lnLuna; + + -- PLCONT + lcSql := 'SELECT max(an) as plan from ' || lcSchemaDestinatie || + '.PLCONT'; + PINFO(lcSql, lcLocatie); + EXECUTE IMMEDIATE lcSql + into lnMaxAn; + if lnMaxAn <> lnAn then + lcSql := 'UPDATE ' || lcSchemaDestinatie || + '.PLCONT SET AN = :1 WHERE AN = :2'; + PINFO(lcSql, lcLocatie); + EXECUTE IMMEDIATE lcSql + USING lnAn, lnMaxAn; + end if; + + -- COTE_TVA + lcSql := 'SELECT max(an*12+luna) from ' || lcSchemaDestinatie || + '.cote_tva'; + PINFO(lcSql, lcLocatie); + EXECUTE IMMEDIATE lcSql + into lnMaxAn; + + lcSql := 'UPDATE ' || lcSchemaDestinatie || + '.COTE_TVA SET AN = :1, LUNA = :2 WHERE AN*12+LUNA = :3'; + PINFO(lcSql, lcLocatie); + EXECUTE IMMEDIATE lcSql + USING lnAn, lnLuna, lnMaxAn; + ------------------------------------------------------------------------ + -- 2. ACTUALIZARE SCHEMA LA ZI + PINFO('Actualizare schema la zi...', lcLocatie); + CONTAFIN_ORACLE.PACK_UPDATE.UpdateROA(tnUpdateApp => 0, + tnUpdateScripturi => 0, + tnUpdateDatabase => 1, + tcSchemaList => tcSchema); + + EXCEPTION + WHEN OTHERS THEN + PINFO(SQLERRM, lcLocatie); + raise_application_error(-20000, SQLERRM); + END; + + DBMS_DATAPUMP.DETACH(h1); + +end NewSchema; +/ + +-- ============================================================================ +-- UPDATESQLPLUS Procedure +-- ============================================================================ +CREATE OR REPLACE NONEDITIONABLE PROCEDURE "SYS"."UPDATESQLPLUS" (tcSqlPlusPath in varchar2, + tcScriptPath in varchar2) as +lcJobName varchar2(500); +begin + lcJobName := 'updateschema_' || to_char(sysdate, 'YYYYMMDDHH24MISS'); + dbms_scheduler.create_job(lcJobName, + job_action => tcSqlPlusPath, + number_of_arguments => 2, + job_type => 'executable', + enabled => false); + dbms_scheduler.set_job_argument_value(lcJobName, 1, '/nolog'); + dbms_scheduler.set_job_argument_value(lcJobName, 2, '@' || tcScriptPath); + dbms_scheduler.enable(lcJobName); +end; +/ + +-- ============================================================================ +-- NEWSCHEMAJOB Procedure +-- ============================================================================ +CREATE OR REPLACE NONEDITIONABLE PROCEDURE "SYS"."NEWSCHEMAJOB" (tcSchema varchar2, + tnLuna number, + tnAn number) as + lcJobName varchar2(500); +begin + lcJobName := 'NEWSCHEMA_' || UPPER(tcSchema); + dbms_scheduler.create_job(job_name => lcJobName, + job_type => 'STORED_PROCEDURE', + job_action => 'NEWSCHEMA', + number_of_arguments => 3, + enabled => false); + dbms_scheduler.set_job_argument_value(lcJobName, 1, tcSchema); + dbms_scheduler.set_job_argument_value(lcJobName, 2, to_char(tnLuna)); + dbms_scheduler.set_job_argument_value(lcJobName, 3, to_char(tnAn)); + dbms_scheduler.enable(lcJobName); +end NEWSCHEMAJOB; +/ + +-- ============================================================================ +-- EXECUTESCRIPTOS Procedure +-- ============================================================================ +CREATE OR REPLACE NONEDITIONABLE PROCEDURE "SYS"."EXECUTESCRIPTOS" (tcPowerShellPath in varchar2, + tcScriptPath in varchar2) as + lcJobName varchar2(500); + begin + lcJobName := 'exec_ps_' || SUBSTR(SYS_GUID(), 1, 8); + + DBMS_SCHEDULER.CREATE_JOB( + job_name => lcJobName, + job_action => tcPowerShellPath, + number_of_arguments => 4, + job_type => 'executable', + enabled => FALSE + ); + + DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(lcJobName, 1, '-ExecutionPolicy'); + DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(lcJobName, 2, 'Bypass'); + DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(lcJobName, 3, '-File'); + DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(lcJobName, 4, tcScriptPath); + + DBMS_SCHEDULER.ENABLE(lcJobName); + end ExecuteScriptOS; +/ + +-- ============================================================================ +-- NEWSCHEMAPROGRESS Function (wrapped) +-- ============================================================================ +CREATE OR REPLACE NONEDITIONABLE FUNCTION "SYS"."NEWSCHEMAPROGRESS" wrapped +a000000 +b2 +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +abcd +8 +252 199 +zxoOlwCbdojcPsGMNEX+7vG4viowgxAJ7UhGfHS5R14whrSDSgcEWXzIxarybpjrYjS1uiG9 ++1zNJlbIu3JK13bwcN6yBEVbLfFgwc0GPkaZbaSp/SMtUbWKq6audu2tqMhrqajFIq/ZxhIj +RbyhiZKk8frL4h2iwYVP6fEjGunska0ZpjeOvUDdhcOmpt60PCOUWO09fPBTLoV9UZ8FnKRq +3BnqmzYpNIh3Nmox3IHh7L1+/B3ZdDkRY588x/i3cp95sH4gv78FSbxaXXG7LcR3AbIAWqKn +yd436mUq5f997PYETavFoaYaFQoUOA1e0g/DynVjNWxPRq56JQnrwP+a0i9dmz3se/CgF7o5 +DdffGzEed6v0ceFecZNDvJKMnbz6AfnkKnMFeISf8Mw= +/ diff --git a/clienti/oracle-xe-21c/import/06_sys_views.sql b/clienti/oracle-xe-21c/import/06_sys_views.sql new file mode 100644 index 0000000..8882264 --- /dev/null +++ b/clienti/oracle-xe-21c/import/06_sys_views.sql @@ -0,0 +1,15 @@ +-- 06_sys_views.sql +-- Create SYS custom views +-- Source: backup/07_sys_views.sql + +CREATE OR REPLACE FORCE VIEW "SYS"."VAUTH_SERII" ("ID_PROGRAM", "NUME", "SERIE", "NR_UTIL", "DATA_VAL") AS +select a.id_program, + a.denumire as nume, + auth_pack.selecteaza_serie(a.id_program) as serie, + auth_pack.selecteaza_nr_util(a.id_program) as nr_util, + auth_pack.selecteaza_data_val(a.id_program) as data_val +from syn_nom_programe a +left join syn_def_programe b on a.id_program = b.ide_program +where b.sters = 0 + and b.instalat = 1; +/ diff --git a/clienti/oracle-xe-21c/import/07_sys_triggers.sql b/clienti/oracle-xe-21c/import/07_sys_triggers.sql new file mode 100644 index 0000000..c924f15 --- /dev/null +++ b/clienti/oracle-xe-21c/import/07_sys_triggers.sql @@ -0,0 +1,12 @@ +-- 07_sys_triggers.sql +-- Create SYS custom triggers +-- Source: backup/08_sys_triggers.sql + +CREATE OR REPLACE TRIGGER "SYS"."LOGON_AUDIT_TRIGGER" +AFTER LOGON ON DATABASE +BEGIN + DBMS_APPLICATION_INFO.SET_CLIENT_INFO(sys_context('userenv', 'ip_address')); + auth_pack.verifica_program(); +END; +/ +ALTER TRIGGER "SYS"."LOGON_AUDIT_TRIGGER" ENABLE; diff --git a/clienti/oracle-xe-21c/import/08_context.sql b/clienti/oracle-xe-21c/import/08_context.sql new file mode 100644 index 0000000..627eafb --- /dev/null +++ b/clienti/oracle-xe-21c/import/08_context.sql @@ -0,0 +1,5 @@ +-- 08_context.sql +-- Create application context +-- Source: backup/09_context.sql + +CREATE OR REPLACE CONTEXT "SESIUNE" USING "CONTAFIN_ORACLE"."SET_VARIABILE"; diff --git a/clienti/oracle-xe-21c/import/09_granturi.sql b/clienti/oracle-xe-21c/import/09_granturi.sql new file mode 100644 index 0000000..297ae9c --- /dev/null +++ b/clienti/oracle-xe-21c/import/09_granturi.sql @@ -0,0 +1,254 @@ +-- 09_granturi.sql +-- Apply all grants +-- Source: backup/03_granturi.sql + +-- ============================================================================ +-- 1. Grants on SYS objects to application schemas +-- ============================================================================ +GRANT EXECUTE ON SYS.AUTH_PACK TO CONTAFIN_ORACLE; +GRANT SELECT ON SYS.DBA_DATAPUMP_JOBS TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.DBMS_SCHEDULER TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY DMPDIR TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.EXECUTESCRIPTOS TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.NEWSCHEMAJOB TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.UPDATESQLPLUS TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_COMUNROA TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAAPROV TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAAUTO TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROABAVERT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACASA TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACOMENZI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACONIMPORT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACONSTRUCTII TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACONT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROACONTRACTE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROADECL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROADEF TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROADEFSALARII TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROADEPOZIT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROADEVIZE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAFACTURARE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAFURNIZORI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAGEN TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAGEST TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAGRESTAURANT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAHOTEL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAHOTELCONFIG TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAIMOB TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAINCHIDSAL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROALUCRARI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAMANAGER TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAMASINI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROANOR TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROANORFRUVIMED TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROANORRENAV TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROANORUTMIDIA TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAOBINV TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAOFERTARE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAPRETURI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAPRINT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAPRINT_INITIALIZARI TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAPRODAGR TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAPRODUCTIE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAREGISTRATURA TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAREPARTIZSAL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROARES TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROARESTAURANT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROARETAIL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROARETAILMON TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASAL TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASALSPEC TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASITFIN TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASITOP TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASTART TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROASUPORT TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROATELCOMM TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROATELMON TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAUPDATE TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_ROAVIN TO CONTAFIN_ORACLE; +GRANT READ, WRITE ON DIRECTORY UPD_USERREPORTS TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.UTL_HTTP TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.UTL_INADDR TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.UTL_MAIL TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.UTL_SMTP TO CONTAFIN_ORACLE; +GRANT EXECUTE ON SYS.UTL_TCP TO CONTAFIN_ORACLE; +GRANT SELECT ON SYS.VAUTH_SERII TO CONTAFIN_ORACLE; + +-- ============================================================================ +-- 2. Grants from CONTAFIN_ORACLE to PUBLIC +-- ============================================================================ +GRANT SELECT ON CONTAFIN_ORACLE.ATAS_ATASAMENTE TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.ATAS_ATASAMENTE TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.ATAS_REFERINTE TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.ATAS_REFERINTE TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.CHARC2COLLECTION TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.CHARN2COLLECTION TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.CHAR_ROW TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.CHAR_TAB TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.CONCATENATE_LIST TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.CONTRACT_M TO PUBLIC; +GRANT UPDATE ON CONTAFIN_ORACLE.CURS_ACTUALIZARI TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.CURS_ACTUALIZARI TO PUBLIC; +GRANT INSERT ON CONTAFIN_ORACLE.CURS_ACTUALIZARI TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.CURS_ACTUALIZARI TO PUBLIC; +GRANT UPDATE ON CONTAFIN_ORACLE.CURS_COTATII TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.CURS_COTATII TO PUBLIC; +GRANT INSERT ON CONTAFIN_ORACLE.CURS_COTATII TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.CURS_COTATII TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.DEF_GRUP TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.DEF_GRUP TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.DEF_GRUP_DREPT TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.DEF_GRUP_DREPT TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.DEF_PROGRAME TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.DEF_PROGRAME TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.FF_PERSINTRET TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.FF_SUME TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.GETWORDCOUNT TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.GETWORDNUM TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.HELPCONT TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.LUNILEAN TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.LUNILEAN TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.MYBALTYPE TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.MYSCALARTYPE TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.MYTABLEBALTYPE TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_CETATENII TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_CETATENII TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_CODURI_CAEN TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_CODURI_CAEN TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_FIRME TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_FIRME TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_FORME_JURIDICE TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_JURIDICE TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_JUDETE TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_JUDETE TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_LOCALITATI TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_LOCALITATI TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_PROGRAME TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_PROGRAME TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_TARI TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_TARI TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_TIPAPATRID TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_TIPAPATRID TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_TIP_SOCIETATE TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_TIP_SOCIETATE TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_UM_ISO TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_UM_ISO TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.NOM_VALUTE_ISO TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.NOM_VALUTE_ISO TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.NUM_ROW TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.NUM_TAB TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.OPTIUNI_PROGRAME TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_DEF_CO TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_DREPTURI TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_ROARTVAI TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UPDATE TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UTILS TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.PACK_UTILS_FILE TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.PIVOT_ROW TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.PIVOT_TABLE TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.RANDINCHIDERETVA TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.RTVAI_AGENTI TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.RTVAI_ISTORIC TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SAL_ACTUALIZARE_COR TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_ACTUALIZARE_COR TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_CAMPURI_RED TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_CONTRACT_M TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SAL_COR TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_COR TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_FF_PERSINTRET TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_FF_SUME TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_DURATA_MUNCA TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_DURATA_MUNCA TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_INTERVALE_MUNCA TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_INTERVALE_MUNCA TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_REPARTIZARE_MUNCA TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_REPARTIZARE_MUNCA TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_STARI_CTR TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_STARI_CTR TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_TEMEI TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_TEMEI TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_TIPAUTORIZATIE TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_TIPAUTORIZATIE TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_TIP_NORME TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_TIP_NORME TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SAL_NOM_TIP_SPOR TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.SAL_NOM_TIP_SPOR TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_RED TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.SAL_TABELESTERS TO PUBLIC; +GRANT DELETE ON CONTAFIN_ORACLE.SERVER_INFO TO PUBLIC; +GRANT INSERT ON CONTAFIN_ORACLE.SERVER_INFO TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.SERVER_INFO TO PUBLIC; +GRANT UPDATE ON CONTAFIN_ORACLE.SERVER_INFO TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGG TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGGTYPE TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.STRINGAGG_COL TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.TABELAVALORITAGURI TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.TABINCHIDERETVA TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.TABSTERS TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.UTILIZATORI TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.UTILIZATORI TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.UW_SEL_ROW TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.UW_SEL_TAB TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.VALOARETAG TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.VANZARI_DETALII_ROW TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.VANZARI_DETALII_TAB TO PUBLIC; +GRANT EXECUTE ON CONTAFIN_ORACLE.VARCHAR2_TAB TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VDEF_PROGRAME TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.VDEF_PROGRAME TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VDEF_UTIL_FIRME TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_FIRME TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_GRUP TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VDEF_UTIL_GRUP TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VNOM_JUDETE TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VNOM_LOCALITATI TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VNOM_TARI TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.VNOM_UM_ISO TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VNOM_UM_ISO TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VNOM_VALUTE_ISO TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VSTATS TO PUBLIC; +GRANT REFERENCES ON CONTAFIN_ORACLE.VUTILIZATORI TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.VUTILIZATORI TO PUBLIC; +GRANT SELECT ON CONTAFIN_ORACLE.V_NOM_FIRME TO PUBLIC; +GRANT INHERIT PRIVILEGES ON SYS.CONTAFIN_ORACLE TO PUBLIC; + +-- ============================================================================ +-- 3. System privileges +-- ============================================================================ +GRANT CREATE ANY CONTEXT TO CONTAFIN_ORACLE; +GRANT CREATE ANY DIRECTORY TO CONTAFIN_ORACLE; +GRANT CREATE ANY JOB TO CONTAFIN_ORACLE; +GRANT CREATE EVALUATION CONTEXT TO CONTAFIN_ORACLE; +GRANT CREATE EXTERNAL JOB TO CONTAFIN_ORACLE; +GRANT CREATE PUBLIC SYNONYM TO CONTAFIN_ORACLE; +GRANT CREATE RULE TO CONTAFIN_ORACLE; +GRANT CREATE RULE SET TO CONTAFIN_ORACLE; +GRANT CREATE SESSION TO CONTAFIN_ORACLE; +GRANT CREATE VIEW TO CONTAFIN_ORACLE; +GRANT DEBUG CONNECT SESSION TO CONTAFIN_ORACLE; +GRANT DELETE ANY TABLE TO CONTAFIN_ORACLE; +GRANT DROP ANY CONTEXT TO CONTAFIN_ORACLE; +GRANT DROP PUBLIC SYNONYM TO CONTAFIN_ORACLE; +GRANT EXECUTE ANY PROCEDURE TO CONTAFIN_ORACLE; +GRANT INSERT ANY TABLE TO CONTAFIN_ORACLE; +GRANT SELECT ANY DICTIONARY TO CONTAFIN_ORACLE; +GRANT SELECT ANY SEQUENCE TO CONTAFIN_ORACLE; +GRANT SELECT ANY TABLE TO CONTAFIN_ORACLE; +GRANT UNLIMITED TABLESPACE TO CONTAFIN_ORACLE; +GRANT UPDATE ANY TABLE TO CONTAFIN_ORACLE; + +-- ============================================================================ +-- 4. Role privileges +-- ============================================================================ +GRANT CONNECT TO CONTAFIN_ORACLE; +GRANT EXP_FULL_DATABASE TO CONTAFIN_ORACLE; +GRANT IMP_FULL_DATABASE TO CONTAFIN_ORACLE; +GRANT RESOURCE TO CONTAFIN_ORACLE; diff --git a/clienti/oracle-xe-21c/import/10_sinonime_publice.sql b/clienti/oracle-xe-21c/import/10_sinonime_publice.sql new file mode 100644 index 0000000..feb0d9c --- /dev/null +++ b/clienti/oracle-xe-21c/import/10_sinonime_publice.sql @@ -0,0 +1,84 @@ +-- 10_sinonime_publice.sql +-- Create public synonyms +-- Source: backup/02_sinonime_publice.sql + +CREATE PUBLIC SYNONYM CHARC2COLLECTION FOR CONTAFIN_ORACLE.CHARC2COLLECTION; +CREATE PUBLIC SYNONYM CHARN2COLLECTION FOR CONTAFIN_ORACLE.CHARN2COLLECTION; +CREATE PUBLIC SYNONYM CHAR_ROW FOR CONTAFIN_ORACLE.CHAR_ROW; +CREATE PUBLIC SYNONYM CHAR_TAB FOR CONTAFIN_ORACLE.CHAR_TAB; +CREATE PUBLIC SYNONYM CONTRACT_M FOR CONTAFIN_ORACLE.CONTRACT_M; +CREATE PUBLIC SYNONYM FF_PERSINTRET FOR CONTAFIN_ORACLE.FF_PERSINTRET; +CREATE PUBLIC SYNONYM FF_SUME FOR CONTAFIN_ORACLE.FF_SUME; +CREATE PUBLIC SYNONYM GETWORDCOUNT FOR CONTAFIN_ORACLE.GETWORDCOUNT; +CREATE PUBLIC SYNONYM GETWORDNUM FOR CONTAFIN_ORACLE.GETWORDNUM; +CREATE PUBLIC SYNONYM NUM_ROW FOR CONTAFIN_ORACLE.NUM_ROW; +CREATE PUBLIC SYNONYM NUM_TAB FOR CONTAFIN_ORACLE.NUM_TAB; +CREATE PUBLIC SYNONYM PACK_ROARTVAI FOR CONTAFIN_ORACLE.PACK_ROARTVAI; +CREATE PUBLIC SYNONYM PACK_UTILS FOR CONTAFIN_ORACLE.PACK_UTILS; +CREATE PUBLIC SYNONYM PACK_UTILS_FILE FOR CONTAFIN_ORACLE.PACK_UTILS_FILE; +CREATE PUBLIC SYNONYM PIVOT_ROW FOR CONTAFIN_ORACLE.PIVOT_ROW; +CREATE PUBLIC SYNONYM PIVOT_TABLE FOR CONTAFIN_ORACLE.PIVOT_TABLE; +CREATE PUBLIC SYNONYM RANDINCHIDERETVA FOR CONTAFIN_ORACLE.RANDINCHIDERETVA; +CREATE PUBLIC SYNONYM RTVAI_AGENTI FOR CONTAFIN_ORACLE.RTVAI_AGENTI; +CREATE PUBLIC SYNONYM RTVAI_ISTORIC FOR CONTAFIN_ORACLE.RTVAI_ISTORIC; +CREATE PUBLIC SYNONYM SAL_CAMPURI_RED FOR CONTAFIN_ORACLE.SAL_CAMPURI_RED; +CREATE PUBLIC SYNONYM SAL_CONTRACT_M FOR CONTAFIN_ORACLE.SAL_CONTRACT_M; +CREATE PUBLIC SYNONYM SAL_RED FOR CONTAFIN_ORACLE.SAL_RED; +CREATE PUBLIC SYNONYM SAL_TABELESTERS FOR CONTAFIN_ORACLE.SAL_TABELESTERS; +CREATE PUBLIC SYNONYM SERVER_INFO FOR CONTAFIN_ORACLE.SERVER_INFO; +CREATE PUBLIC SYNONYM STRINGAGG FOR CONTAFIN_ORACLE.STRINGAGG; +CREATE PUBLIC SYNONYM SYN_ATAS_ATASAMENTE FOR CONTAFIN_ORACLE.ATAS_ATASAMENTE; +CREATE PUBLIC SYNONYM SYN_ATAS_REFERINTE FOR CONTAFIN_ORACLE.ATAS_REFERINTE; +CREATE PUBLIC SYNONYM SYN_CURS_ACTUALIZARI FOR CONTAFIN_ORACLE.CURS_ACTUALIZARI; +CREATE PUBLIC SYNONYM SYN_CURS_COTATII FOR CONTAFIN_ORACLE.CURS_COTATII; +CREATE PUBLIC SYNONYM SYN_DEF_GRUP FOR CONTAFIN_ORACLE.DEF_GRUP; +CREATE PUBLIC SYNONYM SYN_DEF_GRUP_DREPT FOR CONTAFIN_ORACLE.DEF_GRUP_DREPT; +CREATE PUBLIC SYNONYM SYN_DEF_PROGRAME FOR CONTAFIN_ORACLE.DEF_PROGRAME; +CREATE PUBLIC SYNONYM SYN_HELPCONT FOR CONTAFIN_ORACLE.HELPCONT; +CREATE PUBLIC SYNONYM SYN_LUNILEAN FOR CONTAFIN_ORACLE.LUNILEAN; +CREATE PUBLIC SYNONYM SYN_NOM_CETATENII FOR CONTAFIN_ORACLE.NOM_CETATENII; +CREATE PUBLIC SYNONYM SYN_NOM_CODURI_CAEN FOR CONTAFIN_ORACLE.NOM_CODURI_CAEN; +CREATE PUBLIC SYNONYM SYN_NOM_FIRME FOR CONTAFIN_ORACLE.NOM_FIRME; +CREATE PUBLIC SYNONYM SYN_NOM_FORME_JURIDICE FOR CONTAFIN_ORACLE.NOM_FORME_JURIDICE; +CREATE PUBLIC SYNONYM SYN_NOM_FORME_ORGANIZARE FOR CONTAFIN_ORACLE.NOM_FORME_ORGANIZARE; +CREATE PUBLIC SYNONYM SYN_NOM_FORME_PROPRIETATE FOR CONTAFIN_ORACLE.NOM_FORME_PROPRIETATE; +CREATE PUBLIC SYNONYM SYN_NOM_JUDETE FOR CONTAFIN_ORACLE.NOM_JUDETE; +CREATE PUBLIC SYNONYM SYN_NOM_LOCALITATI FOR CONTAFIN_ORACLE.NOM_LOCALITATI; +CREATE PUBLIC SYNONYM SYN_NOM_PROGRAME FOR CONTAFIN_ORACLE.NOM_PROGRAME; +CREATE PUBLIC SYNONYM SYN_NOM_TARI FOR CONTAFIN_ORACLE.NOM_TARI; +CREATE PUBLIC SYNONYM SYN_NOM_TIPAPATRID FOR CONTAFIN_ORACLE.NOM_TIPAPATRID; +CREATE PUBLIC SYNONYM SYN_NOM_TIP_SOCIETATE FOR CONTAFIN_ORACLE.NOM_TIP_SOCIETATE; +CREATE PUBLIC SYNONYM SYN_NOM_VALUTE_ISO FOR CONTAFIN_ORACLE.NOM_VALUTE_ISO; +CREATE PUBLIC SYNONYM SYN_OPTIUNI_PROGRAME FOR CONTAFIN_ORACLE.OPTIUNI_PROGRAME; +CREATE PUBLIC SYNONYM SYN_PACK_DEF_CO FOR CONTAFIN_ORACLE.PACK_DEF_CO; +CREATE PUBLIC SYNONYM SYN_PACK_DREPTURI FOR CONTAFIN_ORACLE.PACK_DREPTURI; +CREATE PUBLIC SYNONYM SYN_SAL_ACTUALIZARE_COR FOR CONTAFIN_ORACLE.SAL_ACTUALIZARE_COR; +CREATE PUBLIC SYNONYM SYN_SAL_COR FOR CONTAFIN_ORACLE.SAL_COR; +CREATE PUBLIC SYNONYM SYN_SAL_NOM_DURATA_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_DURATA_MUNCA; +CREATE PUBLIC SYNONYM SYN_SAL_NOM_INTERVALE_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_INTERVALE_MUNCA; +CREATE PUBLIC SYNONYM SYN_SAL_NOM_REPARTIZARE_MUNCA FOR CONTAFIN_ORACLE.SAL_NOM_REPARTIZARE_MUNCA; +CREATE PUBLIC SYNONYM SYN_SAL_NOM_STARI_CTR FOR CONTAFIN_ORACLE.SAL_NOM_STARI_CTR; +CREATE PUBLIC SYNONYM SYN_SAL_NOM_TEMEI FOR CONTAFIN_ORACLE.SAL_NOM_TEMEI; +CREATE PUBLIC SYNONYM SYN_SAL_NOM_TIPAUTORIZATIE FOR CONTAFIN_ORACLE.SAL_NOM_TIPAUTORIZATIE; +CREATE PUBLIC SYNONYM SYN_SAL_NOM_TIP_NORME FOR CONTAFIN_ORACLE.SAL_NOM_TIP_NORME; +CREATE PUBLIC SYNONYM SYN_SAL_NOM_TIP_SPOR FOR CONTAFIN_ORACLE.SAL_NOM_TIP_SPOR; +CREATE PUBLIC SYNONYM SYN_UTILIZATORI FOR CONTAFIN_ORACLE.UTILIZATORI; +CREATE PUBLIC SYNONYM SYN_VDEF_PROGRAME FOR CONTAFIN_ORACLE.VDEF_PROGRAME; +CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_FIRME FOR CONTAFIN_ORACLE.VDEF_UTIL_FIRME; +CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_GRUP FOR CONTAFIN_ORACLE.VDEF_UTIL_GRUP; +CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_OBIECTE FOR CONTAFIN_ORACLE.VDEF_UTIL_OBIECTE; +CREATE PUBLIC SYNONYM SYN_VDEF_UTIL_PROGRAME FOR CONTAFIN_ORACLE.VDEF_UTIL_PROGRAME; +CREATE PUBLIC SYNONYM SYN_VNOM_JUDETE FOR CONTAFIN_ORACLE.VNOM_JUDETE; +CREATE PUBLIC SYNONYM SYN_VNOM_LOCALITATI FOR CONTAFIN_ORACLE.VNOM_LOCALITATI; +CREATE PUBLIC SYNONYM SYN_VNOM_TARI FOR CONTAFIN_ORACLE.VNOM_TARI; +CREATE PUBLIC SYNONYM SYN_VNOM_UM_ISO FOR CONTAFIN_ORACLE.VNOM_UM_ISO; +CREATE PUBLIC SYNONYM SYN_VNOM_VALUTE_ISO FOR CONTAFIN_ORACLE.VNOM_VALUTE_ISO; +CREATE PUBLIC SYNONYM SYN_VUTILIZATORI FOR CONTAFIN_ORACLE.VUTILIZATORI; +CREATE PUBLIC SYNONYM SYN_V_NOM_FIRME FOR CONTAFIN_ORACLE.V_NOM_FIRME; +CREATE PUBLIC SYNONYM TABELAVALORITAGURI FOR CONTAFIN_ORACLE.TABELAVALORITAGURI; +CREATE PUBLIC SYNONYM TABINCHIDERETVA FOR CONTAFIN_ORACLE.TABINCHIDERETVA; +CREATE PUBLIC SYNONYM TABSTERS FOR CONTAFIN_ORACLE.TABSTERS; +CREATE PUBLIC SYNONYM UW_SEL_ROW FOR CONTAFIN_ORACLE.UW_SEL_ROW; +CREATE PUBLIC SYNONYM UW_SEL_TAB FOR CONTAFIN_ORACLE.UW_SEL_TAB; +CREATE PUBLIC SYNONYM VALOARETAG FOR CONTAFIN_ORACLE.VALOARETAG; +CREATE PUBLIC SYNONYM VANZARI_DETALII_TAB FOR CONTAFIN_ORACLE.VANZARI_DETALII_TAB; diff --git a/clienti/oracle-xe-21c/import/11_import_master.sql b/clienti/oracle-xe-21c/import/11_import_master.sql new file mode 100644 index 0000000..10462d9 --- /dev/null +++ b/clienti/oracle-xe-21c/import/11_import_master.sql @@ -0,0 +1,42 @@ +-- ============================================================ +-- IMPORT MASTER - Recreare PDB Oracle XE 21c +-- Rulat ca SYS AS SYSDBA conectat la PDB-ul NOU +-- ============================================================ +-- PREREQUISITE: PDB creat si deschis, fisierele .dmp in DMPDIR +-- ============================================================ + +SPOOL C:\DMPDIR\import_master.log + +-- ============================================================ +-- FAZA 1: Infrastructura (inainte de Data Pump) +-- ============================================================ +PROMPT [1/13] Creating tablespaces... +@01_tablespaces.sql + +PROMPT [2/13] Creating users... +@02_useri.sql + +PROMPT [3/13] Creating directories... +@03_directories.sql + +PROMPT [4/13] Creating SYS custom tables... +@04_sys_tables.sql + +PROMPT [5/13] Creating context... +@08_context.sql + +-- ============================================================ +-- FAZA 2: Data Pump (din CMD, nu din SQLPlus!) +-- ============================================================ +PROMPT +PROMPT ============================================== +PROMPT STOP! Ruleaza Data Pump din CMD: +PROMPT ============================================== +PROMPT impdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" directory=DMPDIR dumpfile=schemas_export.dmp logfile=schemas_import.log remap_tablespace=USERS:ROA +PROMPT impdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" directory=DMPDIR dumpfile=sys_tables.dmp logfile=sys_tables_import.log table_exists_action=APPEND +PROMPT ============================================== +PROMPT Dupa Data Pump, continua cu: +PROMPT @11_import_master_faza2.sql +PROMPT ============================================== + +SPOOL OFF diff --git a/clienti/oracle-xe-21c/import/11_import_master_faza2.sql b/clienti/oracle-xe-21c/import/11_import_master_faza2.sql new file mode 100644 index 0000000..ce2b84c --- /dev/null +++ b/clienti/oracle-xe-21c/import/11_import_master_faza2.sql @@ -0,0 +1,74 @@ +-- ============================================================ +-- IMPORT MASTER FAZA 2 - Dupa Data Pump +-- Rulat ca SYS AS SYSDBA conectat la PDB-ul NOU +-- ============================================================ +-- PREREQUISITE: Faza 1 + Data Pump terminate cu succes +-- ============================================================ + +SPOOL C:\DMPDIR\import_master_faza2.log + +-- ============================================================ +-- FAZA 3: Obiecte care depind de scheme (dupa Data Pump) +-- ============================================================ +PROMPT [6/13] Creating SYS code objects (AUTH_PACK, procedures)... +@05_sys_code_objects.sql + +PROMPT [7/13] Creating SYS views... +@06_sys_views.sql + +PROMPT [8/13] Creating SYS triggers... +@07_sys_triggers.sql + +PROMPT [9/13] Applying grants on SYS objects... +@09_granturi.sql + +PROMPT [10/13] Creating public synonyms... +@10_sinonime_publice.sql + +-- ============================================================ +-- FAZA 4: Instalare UTL_MAIL (necesar pentru aplicatie) +-- ============================================================ +PROMPT [11/13] Installing UTL_MAIL... +@?/rdbms/admin/utlmail.sql +@?/rdbms/admin/prvtmail.plb +GRANT EXECUTE ON SYS.UTL_MAIL TO CONTAFIN_ORACLE; + +-- ============================================================ +-- FAZA 5: Preventie - dezactiveaza auto tasks +-- ============================================================ +PROMPT [12/13] Disabling auto tasks... +EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'sql tuning advisor', operation => NULL, window_name => NULL); +EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto space advisor', operation => NULL, window_name => NULL); +EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60); +EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7); + +-- ============================================================ +-- FAZA 6: Verificare +-- ============================================================ +PROMPT [13/13] Verification... + +PROMPT -- Spatiu alocat per tablespace: +SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024) AS allocated_mb +FROM dba_data_files GROUP BY tablespace_name ORDER BY allocated_mb DESC; + +PROMPT -- Total alocat: +SELECT ROUND(SUM(bytes)/1024/1024) AS total_mb FROM dba_data_files; + +PROMPT -- Auto tasks: +SELECT client_name, status FROM dba_autotask_client; + +PROMPT -- Obiecte invalide: +SELECT owner, object_name, object_type +FROM dba_objects +WHERE status = 'INVALID' +AND owner IN ('SYS', 'CONTAFIN_ORACLE', 'FIRMA', 'ROMPETROLE') +ORDER BY owner, object_type, object_name; + +SPOOL OFF + +PROMPT +PROMPT ============================================= +PROMPT IMPORT COMPLET! +PROMPT Verificati import_master_faza2.log +PROMPT Resetati parolele utilizatorilor daca e nevoie. +PROMPT ============================================= diff --git a/clienti/oracle-xe-21c/import/cleanup_audit.sql b/clienti/oracle-xe-21c/import/cleanup_audit.sql new file mode 100644 index 0000000..4e438f5 --- /dev/null +++ b/clienti/oracle-xe-21c/import/cleanup_audit.sql @@ -0,0 +1,412 @@ +-- ============================================================ +-- CLEANUP & DISABLE AUDIT - Oracle XE 11g/12c/18c/21c +-- ============================================================ +-- Compatibil cu: Oracle 11g XE, 12c, 18c XE, 21c XE +-- Compatibil cu: non-CDB si CDB/PDB +-- Scop: Curata audit trail din SYSAUX + dezactiveaza auditurile +-- Rulat ca: SYS AS SYSDBA +-- - non-CDB: sqlplus / as sysdba +-- - CDB/PDB: conectat la PDB (ALTER SESSION SET CONTAINER = XEPDB1) +-- ============================================================ +-- +-- IMPORTANT: Pe Oracle XE, audit-urile active umfla SYSAUX/AUDSYS +-- pana la limita de 12 GB si blocheaza baza cu ORA-12954. +-- Acest script: +-- 1. Detecteaza versiunea Oracle si tipul bazei (CDB/non-CDB) +-- 2. Dezactiveaza TOATE audit policies (unified + traditional) +-- 3. Curata audit trail-urile existente +-- 4. Configureaza auto-purge pentru siguranta +-- 5. Dezactiveaza auto tasks care umfla SYSAUX +-- 6. Verifica rezultatul +-- ============================================================ + +SET SERVEROUTPUT ON SIZE UNLIMITED +SET FEEDBACK OFF +SET VERIFY OFF + +SPOOL cleanup_audit.log + +DECLARE + v_version NUMBER; + v_full_ver VARCHAR2(100); + v_is_cdb VARCHAR2(3) := 'NO'; + v_con_name VARCHAR2(128) := 'NON-CDB'; + v_count NUMBER; + v_aud_size_mb NUMBER := 0; + v_sysaux_mb NUMBER := 0; + + -- Helper: executa SQL si ignora erori + PROCEDURE exec_ignore(p_sql VARCHAR2) IS + BEGIN + EXECUTE IMMEDIATE p_sql; + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [SKIP] ' || SUBSTR(SQLERRM, 1, 200)); + END; + + -- Helper: executa SQL cu output + PROCEDURE exec_log(p_sql VARCHAR2, p_desc VARCHAR2) IS + BEGIN + EXECUTE IMMEDIATE p_sql; + DBMS_OUTPUT.PUT_LINE(' [OK] ' || p_desc); + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [SKIP] ' || p_desc || ' - ' || SUBSTR(SQLERRM, 1, 150)); + END; + +BEGIN + -- ========================================================= + -- DETECTIE VERSIUNE SI TIP BAZA + -- ========================================================= + -- version_full exista doar pe 18c+, version exista pe toate + BEGIN + EXECUTE IMMEDIATE 'SELECT version_full FROM v$instance' INTO v_full_ver; + EXCEPTION WHEN OTHERS THEN + SELECT version INTO v_full_ver FROM v$instance; + END; + + v_version := TO_NUMBER(SUBSTR(v_full_ver, 1, INSTR(v_full_ver, '.') - 1)); + + DBMS_OUTPUT.PUT_LINE('============================================================'); + DBMS_OUTPUT.PUT_LINE(' CLEANUP AUDIT - Oracle ' || v_full_ver); + DBMS_OUTPUT.PUT_LINE('============================================================'); + + -- Detectie CDB (12c+) + IF v_version >= 12 THEN + BEGIN + EXECUTE IMMEDIATE 'SELECT CDB FROM V$DATABASE' INTO v_is_cdb; + EXCEPTION WHEN OTHERS THEN + v_is_cdb := 'NO'; + END; + + IF v_is_cdb = 'YES' THEN + EXECUTE IMMEDIATE 'SELECT SYS_CONTEXT(''USERENV'', ''CON_NAME'') FROM DUAL' INTO v_con_name; + END IF; + END IF; + + DBMS_OUTPUT.PUT_LINE(' Versiune: ' || v_version || ' | CDB: ' || v_is_cdb || ' | Container: ' || v_con_name); + + -- Warning daca suntem pe CDB$ROOT + IF v_con_name = 'CDB$ROOT' AND v_is_cdb = 'YES' THEN + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE(' !!! ATENTIE: Esti conectat la CDB$ROOT !!!'); + DBMS_OUTPUT.PUT_LINE(' !!! Ruleaza scriptul si pe fiecare PDB: !!!'); + DBMS_OUTPUT.PUT_LINE(' !!! ALTER SESSION SET CONTAINER = XEPDB1; !!!'); + DBMS_OUTPUT.PUT_LINE(' !!! @cleanup_audit.sql !!!'); + DBMS_OUTPUT.PUT_LINE(' '); + END IF; + + -- Spatiu SYSAUX inainte + SELECT ROUND(SUM(bytes)/1024/1024) + INTO v_sysaux_mb + FROM dba_segments + WHERE tablespace_name = 'SYSAUX'; + + DBMS_OUTPUT.PUT_LINE(' SYSAUX segmente inainte: ' || v_sysaux_mb || ' MB'); + DBMS_OUTPUT.PUT_LINE('------------------------------------------------------------'); + + -- ========================================================= + -- PASUL 1: DEZACTIVARE UNIFIED AUDIT POLICIES (12c+) + -- ========================================================= + IF v_version >= 12 THEN + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE('[PASUL 1] Dezactivare unified audit policies...'); + + -- Dezactiveaza toate politicile active + FOR rec IN ( + SELECT DISTINCT policy_name + FROM audit_unified_enabled_policies + ) LOOP + exec_log('NOAUDIT POLICY ' || rec.policy_name, 'NOAUDIT POLICY ' || rec.policy_name); + END LOOP; + + -- Verifica + SELECT COUNT(*) INTO v_count FROM audit_unified_enabled_policies; + IF v_count = 0 THEN + DBMS_OUTPUT.PUT_LINE(' [OK] Toate politicile unified audit dezactivate'); + ELSE + DBMS_OUTPUT.PUT_LINE(' [WARN] Inca ' || v_count || ' politici active!'); + END IF; + ELSE + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE('[PASUL 1] Oracle ' || v_version || ' - nu are unified audit, skip'); + END IF; + + -- ========================================================= + -- PASUL 2: DEZACTIVARE TRADITIONAL AUDIT (11g-21c) + -- ========================================================= + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE('[PASUL 2] Dezactivare traditional audit...'); + + exec_log('NOAUDIT ALL', 'NOAUDIT ALL'); + exec_log('NOAUDIT ALL PRIVILEGES', 'NOAUDIT ALL PRIVILEGES'); + + -- Dezactiveaza audituri per-user + FOR rec IN ( + SELECT DISTINCT user_name + FROM dba_stmt_audit_opts + WHERE user_name IS NOT NULL + ) LOOP + exec_log('NOAUDIT ALL BY ' || rec.user_name, 'NOAUDIT ALL BY ' || rec.user_name); + END LOOP; + + -- Dezactiveaza audituri pe obiecte + FOR rec IN ( + SELECT owner, object_name, object_type + FROM dba_obj_audit_opts + WHERE alt != '-/-' OR aud != '-/-' OR com != '-/-' + OR del != '-/-' OR gra != '-/-' OR ind != '-/-' + OR ins != '-/-' OR loc != '-/-' OR ren != '-/-' + OR sel != '-/-' OR upd != '-/-' OR exe != '-/-' + ) LOOP + BEGIN + EXECUTE IMMEDIATE 'NOAUDIT ALL ON ' || rec.owner || '.' || rec.object_name; + DBMS_OUTPUT.PUT_LINE(' [OK] NOAUDIT ALL ON ' || rec.owner || '.' || rec.object_name); + EXCEPTION WHEN OTHERS THEN NULL; + END; + END LOOP; + + -- ========================================================= + -- PASUL 3: CLEANUP UNIFIED AUDIT TRAIL (12c+) + -- ========================================================= + IF v_version >= 12 THEN + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE('[PASUL 3] Cleanup unified audit trail...'); + + -- Dimensiune audit trail + BEGIN + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM unified_audit_trail' INTO v_count; + DBMS_OUTPUT.PUT_LINE(' Inregistrari in unified_audit_trail: ' || v_count); + EXCEPTION WHEN OTHERS THEN + v_count := 0; + END; + + IF v_count > 0 THEN + -- Seteaza timestamp de arhivare in trecut (permite stergerea tuturor) + BEGIN + DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP( + audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, + last_archive_time => SYSTIMESTAMP + INTERVAL '1' DAY + ); + DBMS_OUTPUT.PUT_LINE(' [OK] Archive timestamp setat'); + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [SKIP] Archive timestamp: ' || SUBSTR(SQLERRM, 1, 150)); + END; + + -- Curata trail-ul + BEGIN + DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL( + audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, + use_last_arch_timestamp => TRUE + ); + DBMS_OUTPUT.PUT_LINE(' [OK] Unified audit trail curatat'); + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [FAIL] Cleanup unified: ' || SUBSTR(SQLERRM, 1, 150)); + DBMS_OUTPUT.PUT_LINE(' [INFO] Daca ORA-12954, curata mai intai SQL Tuning Sets (vezi Pasul 5)'); + DBMS_OUTPUT.PUT_LINE(' [INFO] Apoi reruleaza acest script'); + END; + + -- Verifica cate au ramas + BEGIN + EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM unified_audit_trail' INTO v_count; + DBMS_OUTPUT.PUT_LINE(' Inregistrari ramase: ' || v_count); + EXCEPTION WHEN OTHERS THEN NULL; + END; + ELSE + DBMS_OUTPUT.PUT_LINE(' [OK] Unified audit trail gol, nimic de curatat'); + END IF; + END IF; + + -- ========================================================= + -- PASUL 4: CLEANUP TRADITIONAL AUDIT TRAIL (AUD$) + -- ========================================================= + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE('[PASUL 4] Cleanup traditional audit trail (AUD$)...'); + + -- Dimensiune AUD$ + BEGIN + SELECT COUNT(*) INTO v_count FROM sys.aud$; + DBMS_OUTPUT.PUT_LINE(' Inregistrari in AUD$: ' || v_count); + EXCEPTION WHEN OTHERS THEN + v_count := 0; + DBMS_OUTPUT.PUT_LINE(' [SKIP] AUD$ nu exista sau nu e accesibil'); + END; + + IF v_count > 0 THEN + -- Curata via DBMS_AUDIT_MGMT + BEGIN + DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP( + audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, + last_archive_time => SYSTIMESTAMP + INTERVAL '1' DAY + ); + DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL( + audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, + use_last_arch_timestamp => TRUE + ); + DBMS_OUTPUT.PUT_LINE(' [OK] AUD$ curatat via DBMS_AUDIT_MGMT'); + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [SKIP] DBMS_AUDIT_MGMT: ' || SUBSTR(SQLERRM, 1, 150)); + -- Fallback: TRUNCATE direct + BEGIN + EXECUTE IMMEDIATE 'TRUNCATE TABLE sys.aud$'; + DBMS_OUTPUT.PUT_LINE(' [OK] AUD$ curatat via TRUNCATE'); + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [FAIL] TRUNCATE AUD$: ' || SUBSTR(SQLERRM, 1, 150)); + END; + END; + END IF; + + -- Curata FGA_LOG$ (Fine-Grained Audit) + BEGIN + SELECT COUNT(*) INTO v_count FROM sys.fga_log$; + IF v_count > 0 THEN + DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL( + audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD, + use_last_arch_timestamp => FALSE + ); + DBMS_OUTPUT.PUT_LINE(' [OK] FGA_LOG$ curatat (' || v_count || ' inregistrari)'); + END IF; + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [SKIP] FGA_LOG$: ' || SUBSTR(SQLERRM, 1, 150)); + END; + + -- ========================================================= + -- PASUL 5: CLEANUP SQL TUNING SETS (SYSAUX - cel mai mare vinovat) + -- ========================================================= + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE('[PASUL 5] Cleanup SQL Tuning Sets din SYSAUX...'); + + -- Drop SQL Tuning Sets + FOR rec IN (SELECT name, owner FROM dba_sqlset) LOOP + BEGIN + DBMS_SQLTUNE.DROP_SQLSET(rec.name, rec.owner); + DBMS_OUTPUT.PUT_LINE(' [OK] Drop SQLSET: ' || rec.owner || '.' || rec.name); + EXCEPTION WHEN OTHERS THEN NULL; + END; + END LOOP; + + -- TRUNCATE tabelele daca DROP nu a eliberat spatiul + exec_log('TRUNCATE TABLE sys.wri$_sqlset_plan_lines', 'TRUNCATE wri$_sqlset_plan_lines'); + exec_log('TRUNCATE TABLE sys.wri$_sqlset_plans', 'TRUNCATE wri$_sqlset_plans'); + exec_log('TRUNCATE TABLE sys.wri$_sqlset_statistics', 'TRUNCATE wri$_sqlset_statistics'); + exec_log('TRUNCATE TABLE sys.wri$_sqlset_statements', 'TRUNCATE wri$_sqlset_statements'); + exec_log('TRUNCATE TABLE sys.wri$_sqlset_references', 'TRUNCATE wri$_sqlset_references'); + exec_log('TRUNCATE TABLE sys.wri$_sqlset_definitions', 'TRUNCATE wri$_sqlset_definitions'); + + -- Cleanup advisor tasks + stats + exec_log('BEGIN DBMS_ADVISOR.DELETE_EXPIRED_TASKS; END;', 'Delete expired advisor tasks'); + exec_log('BEGIN DBMS_STATS.PURGE_STATS(SYSDATE - 7); END;', 'Purge stats older than 7 days'); + exec_log('PURGE DBA_RECYCLEBIN', 'Purge recyclebin'); + + -- ========================================================= + -- PASUL 6: DEZACTIVARE AUTO TASKS + -- ========================================================= + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE('[PASUL 6] Dezactivare auto tasks...'); + + BEGIN + DBMS_AUTO_TASK_ADMIN.DISABLE( + client_name => 'sql tuning advisor', + operation => NULL, + window_name => NULL + ); + DBMS_OUTPUT.PUT_LINE(' [OK] sql tuning advisor DISABLED'); + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [SKIP] sql tuning advisor: ' || SUBSTR(SQLERRM, 1, 150)); + END; + + BEGIN + DBMS_AUTO_TASK_ADMIN.DISABLE( + client_name => 'auto space advisor', + operation => NULL, + window_name => NULL + ); + DBMS_OUTPUT.PUT_LINE(' [OK] auto space advisor DISABLED'); + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [SKIP] auto space advisor: ' || SUBSTR(SQLERRM, 1, 150)); + END; + + -- ========================================================= + -- PASUL 7: AWR RETENTION + STATS RETENTION + -- ========================================================= + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE('[PASUL 7] Configurare AWR retention...'); + + -- Incearca 8 zile (min moving window baseline) + BEGIN + DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( + retention => 8 * 24 * 60, + interval => 60 + ); + DBMS_OUTPUT.PUT_LINE(' [OK] AWR retention = 8 zile, interval = 60 min'); + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [SKIP] AWR: ' || SUBSTR(SQLERRM, 1, 150)); + END; + + BEGIN + DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7); + DBMS_OUTPUT.PUT_LINE(' [OK] Stats history retention = 7 zile'); + EXCEPTION WHEN OTHERS THEN + DBMS_OUTPUT.PUT_LINE(' [SKIP] Stats retention: ' || SUBSTR(SQLERRM, 1, 150)); + END; + + -- ========================================================= + -- PASUL 8: GRANT DBMS_LOCK (necesar pt PACK_UTILS_FILE) + -- ========================================================= + IF v_version >= 12 THEN + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE('[PASUL 8] Grant DBMS_LOCK...'); + exec_log('GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE', 'GRANT DBMS_LOCK TO CONTAFIN_ORACLE'); + END IF; + + -- ========================================================= + -- VERIFICARE FINALA + -- ========================================================= + DBMS_OUTPUT.PUT_LINE(' '); + DBMS_OUTPUT.PUT_LINE('============================================================'); + DBMS_OUTPUT.PUT_LINE(' VERIFICARE FINALA'); + DBMS_OUTPUT.PUT_LINE('============================================================'); + + -- SYSAUX dupa + SELECT ROUND(SUM(bytes)/1024/1024) + INTO v_sysaux_mb + FROM dba_segments + WHERE tablespace_name = 'SYSAUX'; + DBMS_OUTPUT.PUT_LINE(' SYSAUX segmente dupa: ' || v_sysaux_mb || ' MB'); + + -- Audit policies (12c+) + IF v_version >= 12 THEN + SELECT COUNT(*) INTO v_count FROM audit_unified_enabled_policies; + IF v_count = 0 THEN + DBMS_OUTPUT.PUT_LINE(' Unified audit policies: NONE (OK)'); + ELSE + DBMS_OUTPUT.PUT_LINE(' Unified audit policies: ' || v_count || ' ACTIVE (WARN!)'); + END IF; + END IF; + + -- Traditional audit + BEGIN + SELECT COUNT(*) INTO v_count FROM dba_stmt_audit_opts; + DBMS_OUTPUT.PUT_LINE(' Traditional audit opts: ' || v_count); + EXCEPTION WHEN OTHERS THEN NULL; + END; + + -- Auto tasks + DBMS_OUTPUT.PUT_LINE(' Auto tasks:'); + FOR rec IN (SELECT client_name, status FROM dba_autotask_client) LOOP + DBMS_OUTPUT.PUT_LINE(' ' || RPAD(rec.client_name, 45) || rec.status); + END LOOP; + + -- Total alocat + BEGIN + SELECT ROUND(SUM(bytes)/1024/1024) INTO v_sysaux_mb FROM dba_data_files; + DBMS_OUTPUT.PUT_LINE(' Total datafiles: ' || v_sysaux_mb || ' MB / 12288 MB (XE limit)'); + EXCEPTION WHEN OTHERS THEN NULL; + END; + + DBMS_OUTPUT.PUT_LINE('============================================================'); + DBMS_OUTPUT.PUT_LINE(' CLEANUP COMPLET!'); + DBMS_OUTPUT.PUT_LINE('============================================================'); + +END; +/ + +SPOOL OFF diff --git a/clienti/oracle-xe-21c/import/export_pdb_complet.sql b/clienti/oracle-xe-21c/import/export_pdb_complet.sql new file mode 100644 index 0000000..79f0f57 --- /dev/null +++ b/clienti/oracle-xe-21c/import/export_pdb_complet.sql @@ -0,0 +1,236 @@ +-- ============================================================ +-- EXPORT COMPLET PDB XEPDB1 - Oracle XE 21c +-- Scop: backup inainte de recreare PDB pentru recuperare spatiu +-- Rulat ca SYS AS SYSDBA conectat la PDB (XEPDB1) +-- ============================================================ +-- NOTA: Inainte de rulare, asigura-te ca directorul C:\DMPDIR exista +-- si ca DMPDIR e definit: CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR'; +-- ============================================================ + +SET ECHO ON +SET FEEDBACK ON +SET LONG 100000 +SET LONGCHUNKSIZE 100000 +SET PAGESIZE 0 +SET LINESIZE 300 +SET TRIMSPOOL ON +SET HEADING OFF +SET VERIFY OFF +SET SERVEROUTPUT ON SIZE UNLIMITED + +-- ============================================================ +-- PASUL 1: Export scheme cu Data Pump (ruleaza separat din CMD) +-- ============================================================ +-- expdp \"sys/parola@XEPDB1 AS SYSDBA\" schemas=CONTAFIN_ORACLE,FIRMA directory=DMPDIR dumpfile=schemas_export.dmp logfile=schemas_export.log +-- expdp \"sys/parola@XEPDB1 AS SYSDBA\" tables=SYS.AUTH_SERII,SYS.AUTH_DETALII,SYS.INFO directory=DMPDIR dumpfile=sys_tables.dmp logfile=sys_tables_export.log + +-- ============================================================ +-- PASUL 2: Export sinonime publice +-- ============================================================ +SPOOL C:\DMPDIR\02_sinonime_publice.sql + +SELECT 'CREATE PUBLIC SYNONYM ' || synonym_name || ' FOR ' || + table_owner || '.' || table_name || ';' +FROM dba_synonyms +WHERE owner = 'PUBLIC' +AND table_owner IN ('CONTAFIN_ORACLE', 'FIRMA') +ORDER BY synonym_name; + +SPOOL OFF + +-- ============================================================ +-- PASUL 3: Export grant-uri +-- ============================================================ +SPOOL C:\DMPDIR\03_granturi.sql + +-- 3a. Grant-uri pe obiecte SYS catre schemele aplicatiei +SELECT 'GRANT ' || privilege || ' ON ' || owner || '.' || table_name || + ' TO ' || grantee || ';' +FROM dba_tab_privs +WHERE (grantee IN ('CONTAFIN_ORACLE', 'FIRMA') + AND owner = 'SYS') +ORDER BY grantee, table_name; + +-- 3b. Grant-uri de la schemele aplicatiei catre PUBLIC +SELECT 'GRANT ' || privilege || ' ON ' || owner || '.' || table_name || + ' TO ' || grantee || ';' +FROM dba_tab_privs +WHERE grantor IN ('CONTAFIN_ORACLE', 'FIRMA') +ORDER BY grantee, owner, table_name; + +-- 3c. System privileges +SELECT 'GRANT ' || privilege || ' TO ' || grantee || ';' +FROM dba_sys_privs +WHERE grantee IN ('CONTAFIN_ORACLE', 'FIRMA') +ORDER BY grantee, privilege; + +-- 3d. Role privileges +SELECT 'GRANT ' || granted_role || ' TO ' || grantee || ';' +FROM dba_role_privs +WHERE grantee IN ('CONTAFIN_ORACLE', 'FIRMA') +ORDER BY grantee, granted_role; + +SPOOL OFF + +-- ============================================================ +-- PASUL 4: Export DIRECTORY-uri custom +-- ============================================================ +SPOOL C:\DMPDIR\04_directories.sql + +SELECT 'CREATE OR REPLACE DIRECTORY ' || directory_name || + ' AS ''' || directory_path || ''';' +FROM dba_directories +WHERE origin_con_id != 1 +ORDER BY directory_name; + +SPOOL OFF + +-- ============================================================ +-- PASUL 5: Export proceduri, functii, pachete SYS custom +-- ============================================================ +SPOOL C:\DMPDIR\05_sys_code_objects.sql + +-- Packages (include si body automat) +PROMPT -- PACKAGES +SELECT DBMS_METADATA.GET_DDL('PACKAGE', object_name, 'SYS') +FROM dba_objects +WHERE owner = 'SYS' AND oracle_maintained = 'N' +AND object_type = 'PACKAGE' +AND object_name NOT LIKE 'KUPC%' +AND object_name NOT LIKE 'AQ$%'; + +SELECT '/' FROM dual; + +-- Proceduri +PROMPT -- PROCEDURES +SELECT DBMS_METADATA.GET_DDL('PROCEDURE', object_name, 'SYS') +FROM dba_objects +WHERE owner = 'SYS' AND oracle_maintained = 'N' +AND object_type = 'PROCEDURE' +AND object_name NOT LIKE 'KUPC%' +AND object_name NOT LIKE 'AQ$%'; + +SELECT '/' FROM dual; + +-- Functii +PROMPT -- FUNCTIONS +SELECT DBMS_METADATA.GET_DDL('FUNCTION', object_name, 'SYS') +FROM dba_objects +WHERE owner = 'SYS' AND oracle_maintained = 'N' +AND object_type = 'FUNCTION' +AND object_name NOT LIKE 'KUPC%' +AND object_name NOT LIKE 'AQ$%'; + +SELECT '/' FROM dual; + +SPOOL OFF + +-- ============================================================ +-- PASUL 6: Export tabele custom SYS (structura) +-- ============================================================ +SPOOL C:\DMPDIR\06_sys_tables.sql + +SELECT DBMS_METADATA.GET_DDL('TABLE', object_name, 'SYS') +FROM dba_objects +WHERE owner = 'SYS' AND oracle_maintained = 'N' +AND object_type = 'TABLE' +AND object_name IN ('AUTH_SERII', 'AUTH_DETALII', 'INFO'); + +SELECT '/' FROM dual; + +-- Sequence +SELECT DBMS_METADATA.GET_DDL('SEQUENCE', 'SEQ_AUTH_SERII', 'SYS') FROM dual; + +SELECT '/' FROM dual; + +-- Index custom +SELECT DBMS_METADATA.GET_DDL('INDEX', 'PK_AUTH_SERII', 'SYS') FROM dual; + +SELECT '/' FROM dual; + +SPOOL OFF + +-- ============================================================ +-- PASUL 7: Export VIEW-uri custom SYS +-- ============================================================ +SPOOL C:\DMPDIR\07_sys_views.sql + +SELECT DBMS_METADATA.GET_DDL('VIEW', 'VAUTH_SERII', 'SYS') FROM dual; + +SELECT '/' FROM dual; + +SPOOL OFF + +-- ============================================================ +-- PASUL 8: Export TRIGGER-uri custom SYS +-- ============================================================ +SPOOL C:\DMPDIR\08_sys_triggers.sql + +SELECT DBMS_METADATA.GET_DDL('TRIGGER', 'LOGON_AUDIT_TRIGGER', 'SYS') FROM dual; + +SELECT '/' FROM dual; + +SPOOL OFF + +-- ============================================================ +-- PASUL 9: Export CONTEXT +-- ============================================================ +SPOOL C:\DMPDIR\09_context.sql + +SELECT DBMS_METADATA.GET_DDL('CONTEXT', 'SESIUNE') FROM dual; + +SELECT '/' FROM dual; + +SPOOL OFF + +-- ============================================================ +-- PASUL 10: Export useri si profile +-- ============================================================ +SPOOL C:\DMPDIR\10_useri.sql + +SELECT DBMS_METADATA.GET_DDL('USER', username) +FROM dba_users +WHERE oracle_maintained = 'N' +AND username NOT IN ('PDBADMIN') +ORDER BY username; + +SELECT '/' FROM dual; + +SPOOL OFF + +-- ============================================================ +-- PASUL 11: Export tablespace-uri custom +-- ============================================================ +SPOOL C:\DMPDIR\11_tablespaces.sql + +SELECT 'CREATE TABLESPACE ' || tablespace_name || + ' DATAFILE SIZE 100M AUTOEXTEND ON NEXT 100M MAXSIZE 4G;' +FROM dba_tablespaces +WHERE tablespace_name NOT IN ('SYSTEM', 'SYSAUX', 'UNDOTBS1', 'TEMP', 'USERS') +AND contents = 'PERMANENT'; + +SPOOL OFF + +-- ============================================================ +-- REZUMAT FISIERE GENERATE +-- ============================================================ +PROMPT +PROMPT ============================================= +PROMPT EXPORT COMPLET - FISIERE GENERATE +PROMPT ============================================= +PROMPT C:\DMPDIR\02_sinonime_publice.sql +PROMPT C:\DMPDIR\03_granturi.sql +PROMPT C:\DMPDIR\04_directories.sql +PROMPT C:\DMPDIR\05_sys_code_objects.sql +PROMPT C:\DMPDIR\06_sys_tables.sql +PROMPT C:\DMPDIR\07_sys_views.sql +PROMPT C:\DMPDIR\08_sys_triggers.sql +PROMPT C:\DMPDIR\09_context.sql +PROMPT C:\DMPDIR\10_useri.sql +PROMPT C:\DMPDIR\11_tablespaces.sql +PROMPT ============================================= +PROMPT +PROMPT NU UITA sa rulezi si Data Pump SEPARAT: +PROMPT expdp \"sys/parola@XEPDB1 AS SYSDBA\" schemas=CONTAFIN_ORACLE,FIRMA directory=DMPDIR dumpfile=schemas_export.dmp logfile=schemas_export.log +PROMPT expdp \"sys/parola@XEPDB1 AS SYSDBA\" tables=SYS.AUTH_SERII,SYS.AUTH_DETALII,SYS.INFO directory=DMPDIR dumpfile=sys_tables.dmp logfile=sys_tables_export.log +PROMPT ============================================= diff --git a/clienti/oracle-xe-21c/import/recreare_pdb.sql b/clienti/oracle-xe-21c/import/recreare_pdb.sql new file mode 100644 index 0000000..f5d59b5 --- /dev/null +++ b/clienti/oracle-xe-21c/import/recreare_pdb.sql @@ -0,0 +1,134 @@ +-- ============================================================ +-- RECREARE PDB XEPDB1 - Oracle XE 21c +-- Scop: PDB curat cu SYSAUX mic (~500 MB vs 7.8 GB) +-- ============================================================ +-- +-- IMPORTANT: Inlocuieste PAROLA_SYS cu parola reala a user-ului SYS. +-- Daca nu stii parola, seteaz-o INAINTE de export: +-- sqlplus / as sysdba +-- ALTER USER SYS IDENTIFIED BY "ParolaNoua123"; +-- Apoi foloseste "ParolaNoua123" peste tot unde apare PAROLA_SYS. +-- +-- PREREQUISITE: Exporturile trebuie sa fi fost rulate cu succes! +-- 1. expdp (Data Pump) - din CMD +-- 2. export_pdb_complet.sql - din SQLPlus +-- 3. Fisierele .dmp si .sql trebuie sa fie in C:\DMPDIR +-- +-- TIMP ESTIMAT: ~30-45 minute (depinde de dimensiunea dump-urilor) +-- ============================================================ + +-- ************************************************************ +-- PASUL 0: EXPORT (daca nu s-a facut deja) +-- ************************************************************ +-- Conecteaza-te la PDB-ul VECHI si ruleaza exporturile: +-- +-- A) Data Pump (din CMD, nu SQLPlus): +-- expdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" schemas=CONTAFIN_ORACLE,FIRMA directory=DMPDIR dumpfile=schemas_export.dmp logfile=schemas_export.log +-- expdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" tables=SYS.AUTH_SERII,SYS.AUTH_DETALII,SYS.INFO directory=DMPDIR dumpfile=sys_tables.dmp logfile=sys_tables_export.log +-- +-- B) SQL export (din SQLPlus conectat la XEPDB1): +-- sqlplus sys/PAROLA_SYS@XEPDB1 AS SYSDBA +-- @C:\DMPDIR\import\export_pdb_complet.sql +-- +-- VERIFICA: schemas_export.dmp si sys_tables.dmp exista in C:\DMPDIR +-- si log-urile nu contin erori fatale. +-- ************************************************************ + +-- ============================================================ +-- PASUL 1: Drop PDB vechi +-- ============================================================ +-- Conectare: sqlplus / as sysdba (conecteaza la CDB$ROOT) +-- SAU: sqlplus sys/PAROLA_SYS AS SYSDBA + +ALTER SESSION SET CONTAINER = CDB$ROOT; +ALTER PLUGGABLE DATABASE XEPDB1 CLOSE IMMEDIATE; +DROP PLUGGABLE DATABASE XEPDB1 INCLUDING DATAFILES; + +-- ============================================================ +-- PASUL 2: Recreare PDB din seed +-- ============================================================ +CREATE PLUGGABLE DATABASE XEPDB1 ADMIN USER PDBADMIN IDENTIFIED BY "RomfastRP2023" + FILE_NAME_CONVERT = ('pdbseed', 'XEPDB1'); + +ALTER PLUGGABLE DATABASE XEPDB1 OPEN; +ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE; + +-- ============================================================ +-- PASUL 3: Conectare la PDB-ul nou + creare DMPDIR +-- ============================================================ +ALTER SESSION SET CONTAINER = XEPDB1; + +CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR'; +GRANT READ, WRITE ON DIRECTORY DMPDIR TO SYS; + +-- ============================================================ +-- PASUL 4: FAZA 1 - Infrastructura (inainte de Data Pump) +-- ============================================================ +-- Ruleaza import master-ul care creeaza: +-- tablespaces -> useri -> directories -> tabele SYS -> context + +@C:\DMPDIR\import\11_import_master.sql + +-- ============================================================ +-- PASUL 5: DATA PUMP IMPORT (din CMD, NU din SQLPlus!) +-- ============================================================ +-- Deschide CMD nou si ruleaza: +-- +-- impdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" directory=DMPDIR dumpfile=schemas_export.dmp logfile=schemas_import.log remap_tablespace=USERS:ROA +-- impdp \"sys/PAROLA_SYS@XEPDB1 AS SYSDBA\" directory=DMPDIR dumpfile=sys_tables.dmp logfile=sys_tables_import.log table_exists_action=APPEND +-- +-- ASTEAPTA sa termine AMBELE importuri inainte de pasul 6! +-- Verifica log-urile: schemas_import.log si sys_tables_import.log +-- ============================================================ + +-- ============================================================ +-- PASUL 6: FAZA 2 - Obiecte dependente (dupa Data Pump) +-- ============================================================ +-- Conecteaza-te inapoi la PDB: +-- sqlplus sys/PAROLA_SYS@XEPDB1 AS SYSDBA +-- SAU daca esti deja conectat la CDB$ROOT: +-- ALTER SESSION SET CONTAINER = XEPDB1; + +@C:\DMPDIR\import\11_import_master_faza2.sql + +-- ============================================================ +-- PASUL 7: Compilare obiecte invalide +-- ============================================================ +EXEC DBMS_UTILITY.COMPILE_SCHEMA('CONTAFIN_ORACLE'); +EXEC DBMS_UTILITY.COMPILE_SCHEMA('FIRMA'); +EXEC DBMS_UTILITY.COMPILE_SCHEMA('SYS', FALSE); + +-- ============================================================ +-- PASUL 8: Verificare finala +-- ============================================================ +PROMPT +PROMPT ============================================= +PROMPT VERIFICARE SPATIU +PROMPT ============================================= +SELECT tablespace_name, ROUND(SUM(bytes)/1024/1024) AS allocated_mb +FROM dba_data_files GROUP BY tablespace_name ORDER BY allocated_mb DESC; + +SELECT ROUND(SUM(bytes)/1024/1024) AS total_mb FROM dba_data_files; + +PROMPT +PROMPT ============================================= +PROMPT OBIECTE INVALIDE (ar trebui sa fie 0) +PROMPT ============================================= +SELECT owner, object_name, object_type, status +FROM dba_objects +WHERE status = 'INVALID' +AND owner IN ('SYS', 'CONTAFIN_ORACLE', 'FIRMA', 'ROMPETROLE') +ORDER BY owner, object_type, object_name; + +PROMPT +PROMPT ============================================= +PROMPT AUTO TASKS (ar trebui DISABLED) +PROMPT ============================================= +SELECT client_name, status FROM dba_autotask_client; + +PROMPT +PROMPT ============================================= +PROMPT RECREARE PDB COMPLETA! +PROMPT Total alocat ar trebui sa fie ~2-3 GB +PROMPT (vs 11.5 GB inainte de recreare) +PROMPT ============================================= diff --git a/proxmox/lxc108-oracle/roa-windows-setup/README.md b/proxmox/lxc108-oracle/roa-windows-setup/README.md index 71ceb90..c7301dc 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/README.md +++ b/proxmox/lxc108-oracle/roa-windows-setup/README.md @@ -396,10 +396,32 @@ ALTER PLUGGABLE DATABASE XEPDB1 SAVE STATE; impdp ... REMAP_TABLESPACE=ROA:USERS ``` +**ORA-00959: tablespace 'USERS' does not exist (pe PDB nou):** +```cmd +REM PDB-ul nou din PDB$SEED nu are tablespace USERS. Remapeaza la ROA: +impdp "sys/pass@XEPDB1 AS SYSDBA" ... remap_tablespace=USERS:ROA +``` + **ORA-39405: Oracle Data Pump does not support importing from a source database with TSTZ version newer:** Use DMP files exported from Oracle 18c (TSTZ 31) instead of Oracle 21c (TSTZ 35). +### ORA-12954: Database exceeds 12 GB (XE only) + +See `clienti/oracle-xe-21c/depanare-ora-12954-spatiu.md` for full troubleshooting guide. + +**Prevention (run on every new XE installation):** +```sql +-- Connect to XEPDB1 as SYS +EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'sql tuning advisor', operation => NULL, window_name => NULL); +EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto space advisor', operation => NULL, window_name => NULL); +NOAUDIT POLICY ORA_SECURECONFIG; +NOAUDIT POLICY ORA_LOGON_FAILURES; +EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60); +EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7); +GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE; +``` + ### Service Not Starting Check Windows Services: diff --git a/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md b/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md index b67a1e8..89408ab 100644 --- a/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md +++ b/proxmox/lxc108-oracle/roa-windows-setup/docs/00-INSTALL-ORACLE-XE.md @@ -276,6 +276,55 @@ Or via Control Panel > Programs and Features. --- +## Post-Installation: Preventie ORA-12954 (OBLIGATORIU!) + +Oracle XE are limita de 12 GB. Fara aceste setari, SYSAUX creste automat pana la limita (SQL Tuning Sets, audit trail). + +**Conecteaza-te la PDB-ul XEPDB1 ca SYS si ruleaza:** + +```sql +sqlplus sys/romfastsoft@localhost:1521/XEPDB1 as sysdba + +-- 1. Dezactiveaza auto tasks care umfla SYSAUX +EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'sql tuning advisor', operation => NULL, window_name => NULL); +EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(client_name => 'auto space advisor', operation => NULL, window_name => NULL); + +-- 2. Dezactiveaza audit policies (umfla AUDSYS) +NOAUDIT POLICY ORA_SECURECONFIG; +NOAUDIT POLICY ORA_LOGON_FAILURES; + +-- 3. AWR retention minim (8 zile - limita moving window baseline) +EXEC DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(retention => 8*24*60, interval => 60); +EXEC DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(7); + +-- 4. Grant DBMS_LOCK (necesar pentru PACK_UTILS_FILE) +GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE; + +-- 5. Verificare +SELECT client_name, status FROM dba_autotask_client; +SELECT policy_name, enabled_option FROM audit_unified_enabled_policies; +``` + +> **IMPORTANT:** Fara acesti pasi, baza de date va atinge limita de 12 GB in cateva luni! +> Vezi `clienti/oracle-xe-21c/depanare-ora-12954-spatiu.md` pentru ghid complet de depanare. + +--- + +## Gotchas Oracle XE 21c (Windows) + +| Problema | Solutie | +|----------|---------| +| `ORA-02236: invalid file name` la CREATE TABLESPACE | Specifica path complet: `DATAFILE 'C:\...\ROA01.DBF'` | +| `ORA-00959: tablespace 'USERS' does not exist` la impdp | Adauga `remap_tablespace=USERS:ROA` | +| `ORA-00942` la GRANT pe DIRECTORY | Foloseste `GRANT READ, WRITE ON DIRECTORY dir_name` nu `ON SYS.dir_name` | +| `PLS-00201: DBMS_LOCK must be declared` | `GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE` | +| `ORA-65066` la ALTER USER SYSTEM pe PDB | SYSTEM e common user, modifica din CDB$ROOT | +| `ORA-28000: account is locked` la impdp cu SYSTEM | Foloseste SYS AS SYSDBA: `impdp "sys/pass@XEPDB1 AS SYSDBA"` | +| impdp `AS SYSDBA` nu functioneaza pe Windows | Pune in ghilimele: `impdp "sys/pass@XEPDB1 AS SYSDBA"` | +| `ORA-13541` la AWR retention | Retention trebuie >= 8 zile (moving window baseline) | + +--- + ## Next Steps After Oracle XE installation: @@ -283,10 +332,11 @@ After Oracle XE installation: 1. Copy `config.example.ps1` to `config.ps1` 2. Edit `config.ps1` with your settings 3. Run `01-setup-database.ps1` +4. **Run the post-installation prevention steps above!** See main `README.md` for complete workflow. --- -**Last Updated:** 2026-01-28 +**Last Updated:** 2026-03-24 **Project:** ROMFASTSQL - Oracle XE Installation Guide