Files
ROMFASTSQL/proxmox/lxc108-oracle/roa-windows-setup/sql/sys-grants.sql
Marius 3ba36b6119 fix(oracle): sys-grants.sql muta DMPDIR inapoi pe C:, iar 05 numara esecul drept succes
Gasite la prima rulare reala a FAZA2 la VADECO. Toate trei importurile de firma
au picat, si scriptul a raportat "Successful: 3, Failed: 0".

1. sql/sys-grants.sql facea CREATE OR REPLACE DIRECTORY DMPDIR AS 'C:\DMPDIR'
   neconditionat. Ruleaza in pasul 04, deci DUPA importul contafin-ului din 03:
   importul acela reusea cu calea corecta, iar obiectul era mutat imediat dupa.
   Pe VADECO, unde procesul Oracle nu ajunge la nicio cale de pe C:, esecul a
   aparut abia in faza 2, ca ORA-39002 / ORA-39070 / ORA-29283 - ore mai tarziu
   si fara nicio legatura vizibila cu pasul care il provocase.

   E aceeasi clasa de defect ca cel reparat in ec66377 pentru pasul 02, dar
   ascuns intr-un fisier .sql, deci corectia de atunci l-a ratat. Acum calea
   existenta se pastreaza si se raporteaza, ca in grants-public.sql; se creeaza
   doar daca DMPDIR lipseste cu totul, caz in care se si avertizeaza ca pasul 01
   nu a rulat.

2. 05-import-companies.ps1 incrementa $successCount si pe ramura de cod de
   iesire nenul, iar numarul de obiecte de dupa import nu era verificat deloc.
   Rezultatul: trei scheme goale raportate ca importate cu succes, faza 2
   terminata "cu observatii", si defectul descoperit doar pentru ca schemele
   goale sar in ochi la verificare.

   Acum: 0 obiecte inseamna esec, oricare ar fi codul de iesire - un import care
   lasa schema goala nu e un succes. Codul 5 ramane acceptat (ORA-31684 pe user,
   ORA-39082 pe obiecte compilate, normale la ROA), orice alt cod nenul e esec.
   Sumarul si codul de iesire spun adevarul, deci FAZA2.cmd se opreste pe
   :esec_05 in loc sa continue peste un import inexistent.

3. 07-verify-installation.ps1 verifica acum ca baza chiar poate SCRIE in DMPDIR,
   printr-o runda UTL_FILE (deschide, scrie, sterge). Calea din dba_directories
   e doar un sir de caractere si nu spune nimic despre acces - exact motivul
   pentru care New-OracleDirectory primise deja acelasi tratament in ec66377.
   Verificarea asta ar fi prins defectul de mai sus inainte de faza 2.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SzF1hf4aFS1tmJWpPMiwGp
2026-08-25 22:32:17 +03:00

238 lines
9.7 KiB
SQL

-- ============================================================================
-- SYS GRANTS AND SYNONYMS FOR ROA APPLICATION
-- ============================================================================
-- Run AFTER sys-objects.sql and AFTER CONTAFIN_ORACLE import
-- These grants enable CONTAFIN_ORACLE packages to work correctly
--
-- Usage:
-- sqlplus sys/password@service as sysdba @sys-grants.sql
--
-- ============================================================================
SET ECHO OFF
SET FEEDBACK ON
SET SERVEROUTPUT ON SIZE UNLIMITED
WHENEVER SQLERROR CONTINUE
PROMPT
PROMPT ============================================================
PROMPT Installing SYS Grants and Synonyms
PROMPT ============================================================
PROMPT
-- ============================================================================
-- SECTION 1: GRANTS TO CONTAFIN_ORACLE
-- ============================================================================
PROMPT
PROMPT [1/6] Granting privileges to CONTAFIN_ORACLE...
-- Execute on SYS packages
GRANT EXECUTE ON SYS.AUTH_PACK TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.DBMS_SCHEDULER TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.DBMS_LOCK TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.UTL_INADDR TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.UTL_FILE 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 EXECUTE ON SYS.DBMS_CRYPTO TO CONTAFIN_ORACLE;
-- Proceduri SYS proprii ROA. Grant DIRECT, nu prin rol si nu prin sinonim public:
-- CONTAFIN_ORACLE.PACK_UPDATE are drepturi de definitor si apeleaza calificat
-- SYS.Updatesqlplus(...), deci rolurile si sinonimele nu se aplica. Fara ele
-- PACK_UPDATE ramane INVALID (PLS-00201). Confirmat pe ROA_CENTRAL 2026-08-25.
GRANT EXECUTE ON SYS.EXECUTESCRIPTOS TO CONTAFIN_ORACLE;
GRANT EXECUTE ON SYS.UPDATESQLPLUS TO CONTAFIN_ORACLE;
-- Directory privileges
GRANT CREATE ANY DIRECTORY TO CONTAFIN_ORACLE;
GRANT DROP ANY DIRECTORY TO CONTAFIN_ORACLE;
-- Scheduler privileges
GRANT CREATE JOB TO CONTAFIN_ORACLE;
GRANT CREATE EXTERNAL JOB TO CONTAFIN_ORACLE;
GRANT MANAGE SCHEDULER TO CONTAFIN_ORACLE;
PROMPT Grants to CONTAFIN_ORACLE complete.
-- ============================================================================
-- SECTION 2: PUBLIC GRANTS
-- ============================================================================
PROMPT
PROMPT [2/6] Granting public privileges...
-- UTL packages for public use
GRANT EXECUTE ON SYS.UTL_FILE TO PUBLIC;
PROMPT Public grants complete.
-- ============================================================================
-- SECTION 3: SYS PUBLIC SYNONYMS
-- ============================================================================
PROMPT
PROMPT [3/6] Creating SYS public synonyms...
-- Synonyms for SYS procedures
BEGIN EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM SYN_NEWSCHEMA'; EXCEPTION WHEN OTHERS THEN NULL; END;
/
BEGIN EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM SYN_NEWSCHEMAJOB'; EXCEPTION WHEN OTHERS THEN NULL; END;
/
BEGIN EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM EXECUTESCRIPTOS'; EXCEPTION WHEN OTHERS THEN NULL; END;
/
BEGIN EXECUTE IMMEDIATE 'DROP PUBLIC SYNONYM SYN_PINFO'; EXCEPTION WHEN OTHERS THEN NULL; END;
/
CREATE PUBLIC SYNONYM SYN_NEWSCHEMA FOR SYS.NEWSCHEMA;
CREATE PUBLIC SYNONYM SYN_NEWSCHEMAJOB FOR SYS.NEWSCHEMAJOB;
CREATE PUBLIC SYNONYM EXECUTESCRIPTOS FOR SYS.EXECUTESCRIPTOS;
CREATE PUBLIC SYNONYM SYN_PINFO FOR SYS.PINFO;
-- Grants on synonyms
GRANT EXECUTE ON SYN_NEWSCHEMA TO PUBLIC;
GRANT EXECUTE ON SYN_NEWSCHEMAJOB TO PUBLIC;
GRANT EXECUTE ON EXECUTESCRIPTOS TO PUBLIC;
GRANT EXECUTE ON SYN_PINFO TO PUBLIC;
PROMPT SYS public synonyms complete.
-- ============================================================================
-- SECTION 4: DIRECTORY DMPDIR
-- ============================================================================
PROMPT
PROMPT [4/6] Creating DMPDIR directory...
-- DMPDIR e creat de 01-setup-database.ps1, pe calea data cu -DmpDir. Aici doar
-- se acorda drepturile; calea NU se atinge.
--
-- Pana pe 2026-08-25 aici era un CREATE OR REPLACE DIRECTORY ... 'C:\DMPDIR'
-- neconditionat. Pasul 04 ruleaza dupa 03, deci importul contafin-ului reusea
-- (DMPDIR era inca unde il pusese 01), iar apoi 04 muta tacut obiectul inapoi pe
-- C:\DMPDIR. Esecul aparea abia in faza 2, la importul firmelor, ca
-- ORA-39070 / ORA-29283 - ore mai tarziu si fara nicio legatura vizibila cu
-- pasul care il provocase. Vezi docs/lectii-conectare-client-oracle.md.
DECLARE
v_count NUMBER;
v_path VARCHAR2(4000);
BEGIN
SELECT COUNT(*) INTO v_count FROM dba_directories WHERE directory_name = 'DMPDIR';
IF v_count = 0 THEN
EXECUTE IMMEDIATE 'CREATE DIRECTORY DMPDIR AS ''C:\DMPDIR''';
DBMS_OUTPUT.PUT_LINE(' Directory DMPDIR created (C:\DMPDIR).');
DBMS_OUTPUT.PUT_LINE(' ATENTIE: 01-setup-database.ps1 nu a rulat sau a esuat.');
ELSE
SELECT directory_path INTO v_path FROM dba_directories WHERE directory_name = 'DMPDIR';
DBMS_OUTPUT.PUT_LINE(' Directory DMPDIR exista deja (' || v_path || ') - calea se pastreaza.');
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' Directory DMPDIR: ' || SQLERRM);
END;
/
GRANT READ, WRITE ON DIRECTORY DMPDIR TO PUBLIC;
-- ============================================================================
-- SECTION 5: GRANTURI DE DICTIONAR PENTRU PACK_DIAG_SPATIU
-- ============================================================================
-- Consolideaza scripturile de livrare din repo-ul COMUN:
-- sys_2026_08_03_05_DIAG_SPATIU_GRANT - diagnosticul de baza
-- sys_2026_08_03_07_DIAG_SPATIU_GRANT2 - sectiunea XE (plafon editie)
-- sys_2026_08_06_07_DIAG_SPATIU_GRANT3 - provenienta segmentelor LOB/index
--
-- CONTAFIN_ORACLE.PACK_DIAG_SPATIU are drepturi de definitor, iar rolul DBA NU se
-- aplica in pachetele cu drepturi de definitor. Referintele statice la dba_*/v$*
-- au nevoie de grant DIRECT catre user, altfel pachetul ramane INVALID si jobul
-- DIAGSPATIU_ZILNIC nu ruleaza.
--
-- ATENTIE la migrarea unui client existent: tabela de versiuni a lui PACK_MIGRARE
-- traieste in CONTAFIN_ORACLE si vine cu DMP-ul. Baza noua va raporta scripturile
-- sys_* de mai sus drept "deja aplicate", iar ROAACTUALIZARI le va sari - desi in
-- SYS nu exista nimic. De aceea granturile se aplica de aici, la instalare, nu
-- prin actualizator.
--
-- Vederile absente pe versiunea/editia curenta sunt ignorate (ORA-00942).
-- ============================================================================
PROMPT
PROMPT [5/6] Granting data dictionary reads to CONTAFIN_ORACLE (PACK_DIAG_SPATIU)...
DECLARE
TYPE t_lista IS TABLE OF VARCHAR2(30);
laObiecte t_lista := t_lista(
-- sys_2026_08_03_05_DIAG_SPATIU_GRANT
'DBA_DATA_FILES', 'DBA_FREE_SPACE', 'DBA_TEMP_FILES',
'DBA_SEGMENTS', 'DBA_TAB_STATS_HISTORY',
'DBA_SCHEDULER_JOB_RUN_DETAILS', 'DBA_RECYCLEBIN',
'V_$INSTANCE', 'V_$DATABASE', 'V_$PARAMETER', 'V_$TRANSACTION',
'V_$TEMP_SPACE_HEADER', 'V_$FLASH_RECOVERY_AREA_USAGE',
-- sys_2026_08_03_07_DIAG_SPATIU_GRANT2
'DBA_TABLESPACES', 'V_$VERSION',
-- sys_2026_08_06_07_DIAG_SPATIU_GRANT3
'DBA_LOBS', 'DBA_LOB_PARTITIONS', 'DBA_INDEXES'
);
lnAcordate PLS_INTEGER := 0;
lnSarite PLS_INTEGER := 0;
BEGIN
FOR i IN 1 .. laObiecte.COUNT LOOP
BEGIN
EXECUTE IMMEDIATE 'GRANT SELECT ON SYS.' || laObiecte(i) ||
' TO CONTAFIN_ORACLE';
lnAcordate := lnAcordate + 1;
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE = -942 THEN
lnSarite := lnSarite + 1;
DBMS_OUTPUT.PUT_LINE(' SKIP (absent pe aceasta versiune): ' ||
laObiecte(i));
ELSE
RAISE;
END IF;
END;
END LOOP;
DBMS_OUTPUT.PUT_LINE(' Granturi de dictionar acordate: ' || lnAcordate ||
' / ' || laObiecte.COUNT ||
' (sarite: ' || lnSarite || ')');
END;
/
PROMPT Dictionary grants complete.
-- ============================================================================
-- SECTION 6: RECOMPILARE CONTAFIN_ORACLE
-- ============================================================================
-- Obiectele venite cu Data Pump raman INVALID: la momentul importului granturile
-- de mai sus inca nu erau puse, de unde ORA-39082 "created with compilation
-- warnings" pe SENDEMAIL, EMAIL*, PACK_UPDATE, PACK_UTILS. Oracle le-ar recompila
-- abia la primul apel, asa ca fara pasul asta 07-verify-installation raporteaza
-- obiecte invalide la fiecare instalare curata.
-- Verificat pe VM 302 (2026-08-25): 2 invalide inainte, 0 dupa.
-- ============================================================================
PROMPT
PROMPT [6/6] Recompiling CONTAFIN_ORACLE...
BEGIN
SYS.UTL_RECOMP.RECOMP_SERIAL('CONTAFIN_ORACLE');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(' Recompilare: ' || SQLERRM);
END;
/
DECLARE
lnInvalid PLS_INTEGER;
BEGIN
SELECT COUNT(*) INTO lnInvalid
FROM dba_objects
WHERE owner = 'CONTAFIN_ORACLE' AND status = 'INVALID';
DBMS_OUTPUT.PUT_LINE(' Obiecte INVALID ramase in CONTAFIN_ORACLE: ' || lnInvalid);
END;
/
PROMPT Recompile complete.
PROMPT
PROMPT ============================================================
PROMPT SYS Grants and Synonyms Installation Complete
PROMPT ============================================================
PROMPT