fix(oracle): SYS.INFO iese din SYSTEM + job de purjare + diagnostic spatiu clienti
SYS.INFO e log de aplicatie (SYS.pINFO din AUTH_PACK scrie ~7 randuri la fiecare conectare, ~13.500 randuri / ~2 MB pe luna) si nimic din baza nu-l citeste. Creat de installer in tablespace-ul SYSTEM si nepurjat niciodata, a umplut SYSTEM la doi clienti si a oprit actualizarea cu ORA-01653 - eroarea apare pe orice script, pentru ca AUTH_PACK scrie acolo la conectare. SIGMA 03.08.2026 - ff_2026_07_29_02_COMUN_TVA11 picat pe MARCU AUTOMOTIVE 08.08.2026 - 552.581 randuri / 80 MB, SYSTEM cu 5 MB liberi Installer: - sys-objects.sql: SYS.INFO (tabela + segment LOB) se creeaza in tablespace-ul ROA, cu fallback pe SYSTEM daca ROA inca nu exista - scheduler-jobs.sql: job nou SYS.SYSINFO_PURJARE_ZILNIC, zilnic 03:30, retentie 90 zile, stergere in transe de 10.000 randuri; creat ENABLED, pentru ca nu are nimic de configurat iar uitat dezactivat reproduce chiar problema pe care o rezolva. In schema SYS: privilegiile ANY nu se aplica pe obiectele SYS cat timp O7_DICTIONARY_ACCESSIBILITY=FALSE - uninstall-roa.sql: dezinstalarea sterge si jobul - 00-INSTALL-ORACLE-XE.md / -SE.md: pas post-instalare pentru plafonul SYSTEM (maxsize 2000M) si mutarea SYS.INFO la instalarile vechi Documentatie noua (docs/diagnostic-spatiu-clienti.md): jobul DIAGSPATIU_ZILNIC si pragurile lui, formatul emailurilor de alerta si cum se citesc din mbox-urile Thunderbird, procedura de tunel SSH catre serverul unui client, triajul alertelor si starea la 08.08.2026 pe fiecare client. Reparatia la AUTOMOTIVE e deja aplicata in productie (plafon 600 -> 2000 MB, truncate SYS.INFO): SYSTEM a trecut de la 65 MB la 1545 MB de crestere posibila. Scriptul de livrare pentru ceilalti clienti e scris, dar nepublicat: COMUN sys_2026_08_08_02_SYS_INFO_TABLESPACE_PURJARE.sql Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Rft5ofNa4Ux5VEh4YnhJRC
This commit is contained in:
@@ -15,6 +15,7 @@ scripturile reutilizabile generate din fiecare caz.
|
||||
| Procedură | Fișier |
|
||||
|-----------|--------|
|
||||
| Import DMP client pentru teste în LXC 108 | [`import-test-lxc108.md`](import-test-lxc108.md) |
|
||||
| Diagnostic spațiu — job zilnic `DIAGSPATIU_ZILNIC`, praguri, citirea emailurilor de alertă, triaj | [`../../../docs/diagnostic-spatiu-clienti.md`](../../../docs/diagnostic-spatiu-clienti.md) |
|
||||
|
||||
## Convenție
|
||||
|
||||
|
||||
@@ -173,6 +173,35 @@ $env:PATH = "$env:ORACLE_HOME\bin;$env:PATH"
|
||||
sqlplus system/romfastsoft@localhost:1521/ROA
|
||||
```
|
||||
|
||||
### Plafonul SYSTEM și creșterea SYS.INFO (OBLIGATORIU!)
|
||||
|
||||
Standard Edition nu are limita de date a lui XE, dar `SYSTEM` are aceeași problemă: `SYS.INFO` —
|
||||
logul de login al ROA — crește ~13.500 rânduri (~2 MB) pe lună, scrise de `SYS.pINFO` din
|
||||
`AUTH_PACK` la fiecare conectare, și **nu se purjează niciodată**. Când `SYSTEM` se umple, **orice**
|
||||
script de actualizare pică cu `ORA-01653: unable to extend table SYS.INFO`, indiferent ce conține
|
||||
(SIGMA 03.08.2026, AUTOMOTIVE 08.08.2026).
|
||||
|
||||
Instalările noi sunt acoperite: `sys-objects.sql` creează `SYS.INFO` în tablespace-ul `ROA`, iar
|
||||
`scheduler-jobs.sql` creează jobul `SYS.SYSINFO_PURJARE_ZILNIC` (03:30, retenție 90 zile).
|
||||
**Plafonul lui `SYSTEM` rămâne de ridicat manual:**
|
||||
|
||||
```sql
|
||||
-- ca SYSDBA, după crearea bazei; înlocuiește calea cu cea reală din dba_data_files
|
||||
ALTER DATABASE DATAFILE '<ORADATA>\SYSTEM01.DBF' AUTOEXTEND ON NEXT 50M MAXSIZE 2000M;
|
||||
|
||||
SELECT file_name, ROUND(bytes/1048576,2) mb, ROUND(maxbytes/1048576,2) max_mb, autoextensible
|
||||
FROM dba_data_files WHERE tablespace_name = 'SYSTEM';
|
||||
```
|
||||
|
||||
La o instalare mai veche, unde `SYS.INFO` a rămas în `SYSTEM`:
|
||||
|
||||
```sql
|
||||
ALTER TABLE SYS.INFO MOVE TABLESPACE ROA LOB (INFO) STORE AS (TABLESPACE ROA);
|
||||
```
|
||||
|
||||
> Diagnosticul zilnic care prinde asta automat, pragurile și triajul alertelor:
|
||||
> `E:\proiecte\ROMFASTSQL\docs\diagnostic-spatiu-clienti.md`.
|
||||
|
||||
## Memory Configuration (Opțional)
|
||||
|
||||
Pentru Standard Edition cu 16GB RAM:
|
||||
|
||||
@@ -310,6 +310,45 @@ SELECT policy_name, enabled_option FROM audit_unified_enabled_policies;
|
||||
|
||||
---
|
||||
|
||||
## Post-Installation: Plafonul SYSTEM si cresterea SYS.INFO (OBLIGATORIU!)
|
||||
|
||||
Setarile de mai sus apara `SYSAUX`. **`SYSTEM` are o problema separata**, care a blocat deja doi
|
||||
clienti (SIGMA 03.08.2026, AUTOMOTIVE 08.08.2026): `SYS.INFO` — logul de login al ROA, creat de
|
||||
`sql/sys-objects.sql` — creste ~13.500 randuri (~2 MB) pe luna, scrise de `SYS.pINFO` din
|
||||
`AUTH_PACK` la fiecare conectare, si **nu se purja niciodata**.
|
||||
|
||||
Cand `SYSTEM` se umple, **orice** script de actualizare pica cu `ORA-01653: unable to extend table
|
||||
SYS.INFO`, indiferent ce contine — pentru ca `AUTH_PACK` scrie acolo la conectare. Simptomul arata a
|
||||
eroare de SQL, dar nu e.
|
||||
|
||||
Instalarile noi sunt acoperite: `sys-objects.sql` creeaza `SYS.INFO` in tablespace-ul `ROA`, iar
|
||||
`scheduler-jobs.sql` creeaza jobul `SYS.SYSINFO_PURJARE_ZILNIC` (03:30, retentie 90 zile).
|
||||
**Plafonul lui `SYSTEM` ramane insa de ridicat manual**, pentru ca dictionarul singur ocupa ~200 MB
|
||||
si unele instalari il plafoneaza la 600 MB:
|
||||
|
||||
```sql
|
||||
-- ca SYSDBA, dupa crearea bazei; inlocuieste calea cu cea reala din dba_data_files
|
||||
ALTER DATABASE DATAFILE '<ORADATA>\SYSTEM.DBF' AUTOEXTEND ON NEXT 50M MAXSIZE 2000M;
|
||||
|
||||
-- verificare
|
||||
SELECT file_name, ROUND(bytes/1048576,2) mb, ROUND(maxbytes/1048576,2) max_mb, autoextensible
|
||||
FROM dba_data_files WHERE tablespace_name = 'SYSTEM';
|
||||
```
|
||||
|
||||
Plafonul de 11/12 GB al editiei XE se aplica pe **date utilizator** — `SYSTEM` si `SYSAUX` nu intra
|
||||
la socoteala, deci ridicarea la 2000 MB nu apropie baza de limita.
|
||||
|
||||
La o instalare mai veche, unde `SYS.INFO` a ramas in `SYSTEM`, mutarea se face cu:
|
||||
|
||||
```sql
|
||||
ALTER TABLE SYS.INFO MOVE TABLESPACE ROA LOB (INFO) STORE AS (TABLESPACE ROA);
|
||||
```
|
||||
|
||||
> Diagnosticul zilnic care prinde asta automat, pragurile lui si triajul alertelor:
|
||||
> `E:\proiecte\ROMFASTSQL\docs\diagnostic-spatiu-clienti.md`.
|
||||
|
||||
---
|
||||
|
||||
## Gotchas Oracle XE 21c (Windows)
|
||||
|
||||
| Problema | Solutie |
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
-- Creates Oracle Scheduler jobs for automatic daily updates:
|
||||
-- - UPDATEROA_ZILNIC: Daily ROA application update (04:00)
|
||||
-- - UPDATERTVAI_ZILNIC: Daily RTVAI module update (04:30)
|
||||
-- - SYS.SYSINFO_PURJARE_ZILNIC: purjare SYS.INFO la 90 zile (03:30) - creat ENABLED
|
||||
--
|
||||
-- Jobs are created DISABLED by default - enable manually after verification
|
||||
-- Update jobs are created DISABLED by default - enable manually after verification
|
||||
--
|
||||
-- Usage:
|
||||
-- sqlplus sys/password@service as sysdba @scheduler-jobs.sql
|
||||
@@ -31,7 +32,7 @@ PROMPT
|
||||
-- SECTION 1: DROP EXISTING JOBS (if any)
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT [1/4] Removing existing jobs (if any)...
|
||||
PROMPT [1/5] Removing existing jobs (if any)...
|
||||
|
||||
BEGIN
|
||||
BEGIN
|
||||
@@ -49,6 +50,14 @@ BEGIN
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE(' UPDATERTVAI_ZILNIC job did not exist (OK)');
|
||||
END;
|
||||
|
||||
BEGIN
|
||||
DBMS_SCHEDULER.DROP_JOB(job_name => 'SYS.SYSINFO_PURJARE_ZILNIC', force => TRUE);
|
||||
DBMS_OUTPUT.PUT_LINE(' Dropped existing SYSINFO_PURJARE_ZILNIC job');
|
||||
EXCEPTION
|
||||
WHEN OTHERS THEN
|
||||
DBMS_OUTPUT.PUT_LINE(' SYSINFO_PURJARE_ZILNIC job did not exist (OK)');
|
||||
END;
|
||||
END;
|
||||
/
|
||||
|
||||
@@ -56,7 +65,7 @@ END;
|
||||
-- SECTION 2: CREATE UPDATEROA_ZILNIC JOB
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT [2/4] Creating UPDATEROA_ZILNIC job...
|
||||
PROMPT [2/5] Creating UPDATEROA_ZILNIC job...
|
||||
|
||||
BEGIN
|
||||
DBMS_SCHEDULER.CREATE_JOB(
|
||||
@@ -121,7 +130,7 @@ END;
|
||||
-- SECTION 3: CREATE UPDATERTVAI_ZILNIC JOB
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT [3/4] Creating UPDATERTVAI_ZILNIC job...
|
||||
PROMPT [3/5] Creating UPDATERTVAI_ZILNIC job...
|
||||
|
||||
BEGIN
|
||||
DBMS_SCHEDULER.CREATE_JOB(
|
||||
@@ -145,10 +154,60 @@ END;
|
||||
/
|
||||
|
||||
-- ============================================================================
|
||||
-- SECTION 4: GRANT SCHEDULER PRIVILEGES TO CONTAFIN_ORACLE
|
||||
-- SECTION 4: CREATE SYS.SYSINFO_PURJARE_ZILNIC JOB
|
||||
-- ============================================================================
|
||||
-- SYS.INFO e logul de login scris de SYS.pINFO din AUTH_PACK: ~7 randuri per conectare,
|
||||
-- ~13.500 randuri (~2 MB) pe luna, si nimic din baza nu-l citeste. Fara purjare creste la
|
||||
-- nesfarsit si, mai devreme sau mai tarziu, umple tablespace-ul in care sta -> ORA-01653 la
|
||||
-- primul script de actualizare care cere o extenta noua.
|
||||
--
|
||||
-- Jobul e in schema SYS pentru ca privilegiile ANY nu se aplica pe obiectele SYS cat timp
|
||||
-- O7_DICTIONARY_ACCESSIBILITY = FALSE; din CONTAFIN_ORACLE ar iesi ORA-01031.
|
||||
-- Stergerea se face in transe de 10.000 de randuri, ca prima rulare (care poate gasi sute de
|
||||
-- mii de randuri acumulate) sa nu umfle UNDO.
|
||||
--
|
||||
-- Retentie: 90 de zile, aceeasi cu DIAG_SPATIU_LOG.
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT [4/4] Granting scheduler privileges to CONTAFIN_ORACLE...
|
||||
PROMPT [4/5] Creating SYS.SYSINFO_PURJARE_ZILNIC job...
|
||||
|
||||
BEGIN
|
||||
DBMS_SCHEDULER.CREATE_JOB(
|
||||
job_name => 'SYS.SYSINFO_PURJARE_ZILNIC',
|
||||
job_type => 'PLSQL_BLOCK',
|
||||
job_action => q'[
|
||||
declare
|
||||
lnRanduri number;
|
||||
begin
|
||||
loop
|
||||
delete from sys.info
|
||||
where dataora < systimestamp - interval '90' day
|
||||
and rownum <= 10000;
|
||||
lnRanduri := sql%rowcount;
|
||||
commit;
|
||||
exit when lnRanduri = 0;
|
||||
end loop;
|
||||
end;
|
||||
]',
|
||||
start_date => TRUNC(SYSDATE) + 1 + 3.5/24, -- Tomorrow at 03:30
|
||||
repeat_interval => 'FREQ=DAILY;INTERVAL=1',
|
||||
end_date => NULL,
|
||||
enabled => TRUE, -- ENABLED: nu are nimic de configurat, iar uitat dezactivat
|
||||
-- reproduce exact problema pe care o rezolva
|
||||
auto_drop => FALSE,
|
||||
comments => 'Purjare SYS.INFO la 90 zile - runs at 03:30'
|
||||
);
|
||||
|
||||
DBMS_OUTPUT.PUT_LINE(' SYSINFO_PURJARE_ZILNIC job created (ENABLED)');
|
||||
DBMS_OUTPUT.PUT_LINE(' Schedule: Daily at 03:30, retentie 90 zile');
|
||||
END;
|
||||
/
|
||||
|
||||
-- ============================================================================
|
||||
-- SECTION 5: GRANT SCHEDULER PRIVILEGES TO CONTAFIN_ORACLE
|
||||
-- ============================================================================
|
||||
|
||||
PROMPT [5/5] Granting scheduler privileges to CONTAFIN_ORACLE...
|
||||
|
||||
-- Grant CREATE JOB privilege (may already exist)
|
||||
BEGIN
|
||||
@@ -192,17 +251,18 @@ PROMPT Scheduler Jobs Verification
|
||||
PROMPT ========================================
|
||||
PROMPT
|
||||
|
||||
PROMPT CONTAFIN_ORACLE scheduled jobs:
|
||||
SELECT job_name,
|
||||
PROMPT ROA scheduled jobs:
|
||||
SELECT owner,
|
||||
job_name,
|
||||
job_type,
|
||||
enabled,
|
||||
state,
|
||||
TO_CHAR(next_run_date, 'YYYY-MM-DD HH24:MI:SS') AS next_run,
|
||||
repeat_interval
|
||||
FROM dba_scheduler_jobs
|
||||
WHERE owner = 'CONTAFIN_ORACLE'
|
||||
AND job_name IN ('UPDATEROA_ZILNIC', 'UPDATERTVAI_ZILNIC')
|
||||
ORDER BY job_name;
|
||||
WHERE (owner = 'CONTAFIN_ORACLE' AND job_name IN ('UPDATEROA_ZILNIC', 'UPDATERTVAI_ZILNIC'))
|
||||
OR (owner = 'SYS' AND job_name = 'SYSINFO_PURJARE_ZILNIC')
|
||||
ORDER BY owner, job_name;
|
||||
|
||||
PROMPT
|
||||
PROMPT Job arguments for UPDATEROA_ZILNIC:
|
||||
@@ -217,8 +277,9 @@ PROMPT ========================================
|
||||
PROMPT Scheduler Jobs Creation Complete
|
||||
PROMPT ========================================
|
||||
PROMPT
|
||||
PROMPT IMPORTANT: Jobs are created DISABLED by default.
|
||||
PROMPT To enable a job after verifying configuration:
|
||||
PROMPT IMPORTANT: Update jobs are created DISABLED by default.
|
||||
PROMPT SYS.SYSINFO_PURJARE_ZILNIC is created ENABLED (nothing to configure).
|
||||
PROMPT To enable an update job after verifying configuration:
|
||||
PROMPT
|
||||
PROMPT -- Enable UPDATEROA_ZILNIC
|
||||
PROMPT EXEC DBMS_SCHEDULER.ENABLE('CONTAFIN_ORACLE.UPDATEROA_ZILNIC');
|
||||
|
||||
@@ -77,21 +77,37 @@ END;
|
||||
/
|
||||
|
||||
PROMPT [3/11] Creating SYS.INFO table (logging)...
|
||||
-- IMPORTANT: SYS.INFO e log de aplicatie, nu obiect de dictionar - SYS.pINFO scrie ~7 randuri la
|
||||
-- fiecare conectare (~13.500 randuri / ~2 MB pe luna) si nimic nu o citeste. Tinuta in SYSTEM,
|
||||
-- umple tablespace-ul dictionarului si **orice** script de actualizare pica apoi cu
|
||||
-- ORA-01653 (SIGMA 03.08.2026, AUTOMOTIVE 08.08.2026). De aceea se creeaza in tablespace-ul
|
||||
-- aplicatiei, iar cresterea e marginita de jobul SYSINFO_PURJARE_ZILNIC (scheduler-jobs.sql).
|
||||
DECLARE
|
||||
v_count NUMBER;
|
||||
v_ts VARCHAR2(30);
|
||||
BEGIN
|
||||
SELECT COUNT(*) INTO v_count FROM dba_tables
|
||||
WHERE owner = 'SYS' AND table_name = 'INFO';
|
||||
IF v_count > 0 THEN
|
||||
DBMS_OUTPUT.PUT_LINE(' Table INFO already exists, skipping.');
|
||||
ELSE
|
||||
SELECT MAX(tablespace_name) INTO v_ts
|
||||
FROM dba_tablespaces WHERE tablespace_name = 'ROA';
|
||||
|
||||
IF v_ts IS NULL THEN
|
||||
v_ts := 'SYSTEM';
|
||||
DBMS_OUTPUT.PUT_LINE(' WARNING: tablespace ROA missing - INFO falls back to SYSTEM.');
|
||||
DBMS_OUTPUT.PUT_LINE(' Run create-tablespace.sql first, then move it:');
|
||||
DBMS_OUTPUT.PUT_LINE(' ALTER TABLE SYS.INFO MOVE TABLESPACE ROA LOB (INFO) STORE AS (TABLESPACE ROA);');
|
||||
END IF;
|
||||
|
||||
EXECUTE IMMEDIATE '
|
||||
CREATE TABLE SYS.INFO (
|
||||
INFO CLOB,
|
||||
DATAORA TIMESTAMP(6) DEFAULT SYSTIMESTAMP,
|
||||
LOCATIA VARCHAR2(200) NULL
|
||||
) TABLESPACE SYSTEM';
|
||||
DBMS_OUTPUT.PUT_LINE(' Table INFO created.');
|
||||
) TABLESPACE ' || v_ts || ' LOB (INFO) STORE AS (TABLESPACE ' || v_ts || ')';
|
||||
DBMS_OUTPUT.PUT_LINE(' Table INFO created in tablespace ' || v_ts || '.');
|
||||
END IF;
|
||||
END;
|
||||
/
|
||||
|
||||
@@ -216,6 +216,12 @@ BEGIN EXECUTE IMMEDIATE 'DROP VIEW SYS.VAUTH_SERII';
|
||||
EXCEPTION WHEN OTHERS THEN NULL; END;
|
||||
/
|
||||
|
||||
-- Drop scheduler job (SYS.INFO purge)
|
||||
BEGIN DBMS_SCHEDULER.DROP_JOB(job_name => 'SYS.SYSINFO_PURJARE_ZILNIC', force => TRUE);
|
||||
DBMS_OUTPUT.PUT_LINE(' Dropped SYS.SYSINFO_PURJARE_ZILNIC');
|
||||
EXCEPTION WHEN OTHERS THEN NULL; END;
|
||||
/
|
||||
|
||||
-- Drop procedures
|
||||
BEGIN EXECUTE IMMEDIATE 'DROP PROCEDURE SYS.UPDATESQLPLUS';
|
||||
DBMS_OUTPUT.PUT_LINE(' Dropped SYS.UPDATESQLPLUS');
|
||||
|
||||
Reference in New Issue
Block a user