- Complete PDB export/import workflow (16 scripts in clienti/oracle-xe-21c/import/) - Recreare PDB script with step-by-step guide (recreare_pdb.sql) - Universal audit cleanup script for Oracle XE 11g-21c (cleanup_audit.sql) - Troubleshooting guide with all lessons learned (depanare-ora-12954-spatiu.md) - Fixed: DIRECTORY grant syntax, DBMS_LOCK grant, remap_tablespace USERS:ROA, impdp quoted AS SYSDBA for Windows, AWR retention 8 days, datafile full path - Updated roa-windows-setup docs with XE prevention steps and gotchas table Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
135 lines
5.8 KiB
SQL
135 lines
5.8 KiB
SQL
-- ============================================================
|
|
-- 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 =============================================
|