User Group Housekeeping in Gold. Regular routines make housekeeping easier.
Housekeeping -1 - Muniqsoft Consulting · Housekeeping -12. Stichwörter: Aufräumen im Dateisystem...
Transcript of Housekeeping -1 - Muniqsoft Consulting · Housekeeping -12. Stichwörter: Aufräumen im Dateisystem...
Housekeeping -1
Housekeeping -2
Housekeeping -3
Housekeeping -4
Housekeeping -5
Housekeeping -6
Stichwörter: Aufräumen im Dateisystem
Housekeeping -7
Stichwörter: Aufräumen im Dateisystem
Housekeeping -8
Das ganze als Datenbank-Job:DECLARE
oracle_home VARCHAR2(256);
diag_path VARCHAR2(256);
minutes NUMBER:=0;
PROCEDURE adrci_job(
job_name IN VARCHAR2,
cmd IN VARCHAR2) IS
BEGIN
dbms_scheduler.create_job(
job_name => job_name,
job_type => 'EXECUTABLE',
job_action => oracle_home||'\adrci.exe ',
start_date => SYSTIMESTAMP,
auto_drop => TRUE,
enabled => TRUE);
COMMIT;
END;
BEGIN
dbms_system.get_env('ORACLE_HOME',oracle_home);
SELECT replace(substr(value,instr(value,'diag')+5),'\','\\') INTO diag_path
FROM v$diag_info WHERE name='ADR Home';
adrci_job('ADRCI_JOB1','exec="set homepath '||diag_path||'; purge -age
'||minutes||' -type trace"'); adrci_job('ADRCI_JOB2','exec="set homepath
'||diag_path||'; purge -age '||minutes||' -type incident"');
-- Derzeit funktioniert alle Werte >0 nicht (20.2.2010)
adrci_job('ADRCI_JOB3','exec="set homepath '||diag_path||'; purge -age
'||minutes||' -type alert"');
END; /
Stichwörter: Aufräumen im Dateisystem
Housekeeping -9
Housekeeping -10
Hinweis:
Ein SELECT liefert die Speicherdauer für die verschiedenen Homes:SELECT adr_home,shortp_policy,longp_policy
FROM V$DIAG_ADR_CONTROL;
Housekeeping -11
'#######################################################
' ### VBA Routine zum Löschen von Trace-Dateien
' ### Geschrieben von Marco Patzwahl, MuniQSoft GmbH
' ### (c) 2005 und 2006 Version 1.0
' ### Aufrufsyntax: del_trac.vbs <pfad> <tage>
' ### Löscht alle Trace-Dateien im Ordner <pfad>
' ### die aelter als <tage> sind
' ### Beispiel: del_trace.vbs D:\oracle\admin\o10g\udump 21
Dim oFSO
Set oFSO = Createobject("Scripting.FileSystemObject")
Dim oStartFolder
Dim oFolder
Dim oFile
Dim dKillDate
Dim dKillDays
Set Args = WScript.Arguments
sStartFolder=Args(0)
dKillDays=Args(1)
'Const STARTDIR = "D:\oracle\admin\o10g\udump"
'Const KILLDATE = "21"
dKillDate = CDate(Now() - CInt(dKillDays))
Set oStartFolder = oFSO.getFolder(sStartFolder)
For Each oFile In oStartFolder.Files
If oFile.DateCreated < DKillDate and Mid(oFile.name,Len(oFile.name)-
3) = ".trc" Then
oFile.Delete True
End If
Next
Stichwörter: Aufräumen im Dateisystem
Housekeeping -12
Stichwörter: Aufräumen im Dateisystem
Housekeeping -13
CREATE OR REPLACE TYPE ms_file_typeAS OBJECT (path VARCHAR2(512),file_name VARCHAR2(256),fsize NUMBER,ftype VARCHAR2(32));/
CREATE OR REPLACE TYPE ms_file_tab_type AS TABLE OF ms_file_type;/
CREATE OR REPLACE FUNCTION ms_file_check(f_path IN VARCHAR2)RETURN ms_file_tab_type PIPELINED ISPRAGMA AUTONOMOUS_TRANSACTION;v_file_t ms_file_tab_type:=ms_file_tab_type(ms_file_type(null,null,null,null));ns VARCHAR2(1024);v_dir VARCHAR2(1024):=f_path;v_file UTL_FILE.FILE_TYPE;v_exists BOOLEAN;v_len NUMBER:=1;v_bs NUMBER;v_os_sl CHAR(1):='/';BEGINIF instr(v_dir,v_os_sl)=0 THEN -- Betriebssystem prüfen (UNIX/Win)v_os_sl:='\'; --'Slash wechseln
END IF;DBMS_BACKUP_RESTORE.SEARCHFILES(v_dir, ns); -- Verzeichnis incl Unterordner einlesenFOR r IN ( SELECT fname_krbmsft AS name FROM x$krbmsft) LOOP
-- Temporäres Directory anlegen für utl_fileEXECUTE IMMEDIATE 'CREATE OR REPLACE DIRECTORY ORA_TMP_DIR AS '''|| substr(r.name,1,instr(r.name,v_os_sl,-1)-1)||''''; v_file := UTL_FILE.FOPEN('ORA_TMP_DIR', r.name, 'r');-- Größe der Datei einlesenUTL_FILE.FGETATTR('ORA_TMP_DIR', r.name, v_exists, v_len, v_bs);v_file_t(1).path:=substr(r.name,1,instr(r.name,v_os_sl,-1)-1);v_file_t(1).file_name:=substr(r.name,instr(r.name,v_os_sl,-1)+1);v_file_t(1).fsize:=v_len;IF instr(v_file_t(1).file_name,'.')>0 THENv_file_t(1).ftype:=substr(v_file_t(1).file_name,instr(v_file_t(1).file_name,'.')+1,32);
ELSE v_file_t(1).ftype:=null;
END IF;PIPE ROW (v_file_t(1)) ;UTL_FILE.FCLOSE(v_file);
END LOOP;EXECUTE IMMEDIATE 'DROP DIRECTORY ORA_TMP_DIR';END;/
SELECT * FROM table(ms_file_check('d:\oracle\diag\rdbms\o112\o112\trace'))order by fsize desc
SELECT * FROM table(ms_file_check('d:\oracle\diag\rdbms\o112\o112'))where ftype in ('trc','trm','log')order by fsize desc
Housekeeping -14
Housekeeping -15
Housekeeping -16
Stichwörter: Enterprise Manager
Housekeeping -17
Stichwörter: Enterprise Manager
Housekeeping -18
Stichwörter: Installations-Logs
Housekeeping -19
Housekeeping -20
Housekeeping -21
Housekeeping -22
Housekeeping -23
Stichwörter: Audits
Housekeeping -24
Weiteres Beispiel:
Alle 48 Stunden Purge Job Starten:
DECLARE
att NUMBER := dbms_audit_mgmt.audit_trail_all;
pje NUMBER := dbms_audit_mgmt.purge_job_enable;
BEGIN
dbms_audit_mgmt.create_purge_job(
audit_trail_type=>att,
audit_trail_purge_interval=>48,
audit_trail_purge_name=>'AUDIT_PURGE',
use_last_arch_timestamp => TRUE);
--dbms_audit_mgmt.set_purge_job_interval('AUDIT_PURGE', 7*24);
dbms_audit_mgmt.set_purge_job_status('AUDIT_PURGE', pje);
dbms_audit_mgmt.drop_purge_job('AUDIT_PURGE');
END;
/
Stichwörter: Audits
Housekeeping -25
Housekeeping -26
Housekeeping -27
Stichwörter: Scheduler Logs
Housekeeping -28
Stichwörter: Scheduler Logs
Housekeeping -29
Hinweis: Sie können die Speicherdauer wieder kontrollieren durch:SELECT retention
FROM dba_hist_wr_control;
Housekeeping -30
Hinweis:
Sie können auch die Lebensdauer des Tasks manuell einstellen (hier 3 Tage):
BEGIN
DBMS_ADVISOR.SET_TASK_PARAMETER (
task_name =>'MY_TASK',
parameter =>' DAYS_TO_EXPIRE',
value=>3);
END;
/
Housekeeping -31
Housekeeping -32
REM Statspack komplett aufräumen (Löschen)
DECLARE
t_n VARCHAR2(30);
BEGIN
FOR r IN (select table_name FROM dba_tables
WHERE owner='PERFSTAT'
AND table_name NOT IN
('STATS$IDLE_EVENT','STATS$LEVEL_DESCRIPTION','STATS$STATSPACK_PARA
METER',
'STATS$DATABASE_INSTANCE','STATS$SNAPSHOT','STATS$TEMP_SQLSTATS'))
LOOP
BEGIN
t_n:=r.table_name;
EXECUTE IMMEDIATE 'TRUNCATE TABLE perfstat.'||t_n||'
DROP STORAGE';
EXECUTE IMMEDIATE 'ALTER TABLE perfstat.'||t_n||' ENABLE
ROW MOVEMENT';
EXECUTE IMMEDIATE 'ALTER TABLE perfstat.'||t_n||' SHRINK
SPACE';
EXCEPTION WHEN OTHERS THEN
dbms_output.put_line(' Fehler bei Reorg in
Tabelle:'||t_n||':'||sqlerrm);
END;
END LOOP;
DELETE FROM STATS$SNAPSHOT;
DELETE FROM STATS$DATABASE_INSTANCE;
COMMIT;
END;
Stichwörter: Statspack
Housekeeping -33
Hinweis:
Sie können natürlich auch Snapshots aus einem bestimmten Bereich löschen:
Snapshots manuell löschen. Hier im Beispiel von 22-32
BEGIN
DBMS_WORKLOAD_REPOSITORY.drop_snapshot_range (
low_snap_id => 22,
high_snap_id => 32);
END;
/
Stichwörter: Snapshots
Housekeeping -34
Beispiel-Select:SELECT distinct
ref_owner_1||'.'||ref_name_1,ref_type_1,ref_owner_2||'.'||nam
e_2||'('||type_1||')',ref_name_2,ref_type_2 FROM (
select owner owner_1,name name_1,type type_1,referenced_owner
ref_owner_1,referenced_name ref_name_1,referenced_type
ref_type_1
from dba_dependencies
where owner='SCOTT'
and referenced_type='TABLE'
and type='TRIGGER' order by 1,2) t1
FULL OUTER JOIN
(
select owner owner_2,name name_2,type type_2,referenced_owner
ref_owner_2,referenced_name ref_name_2,referenced_type
ref_type_2
from dba_dependencies
where owner='SCOTT'
and referenced_type='TABLE'
and type='TRIGGER' order by 1,2) t2
ON (owner_1=owner_2 and name_1=name_2)
where ref_owner_1||ref_name_1<>ref_owner_2||ref_name_2
order by 1,2;
Housekeeping -35
Housekeeping -36
Housekeeping -37
Housekeeping -38
Housekeeping -39