Use the -d switch and redirect the content of the zip file to the desired directory
unzip myzipfile.zip -d myfolder
Minimalistic Oracle contains a collection of practical examples from my encounters with Oracle technologies. When relevant, I also write about other technologies, like Linux or PostgreSQL. Many of the posts starts with "how to" since they derive directly from my own personal experience. My goal is to provide simple examples, so that they can be easily adapted to other situations.
unzip myzipfile.zip -d myfolder
connect / as sysdba
grant select on dba_tab_partitions to scott;
connect scott/tiger
whenever sqlerror continue
drop sequence part_maint_seq;
create sequence part_maint_seq
increment by 1
start with 1
nomaxvalue
nominvalue
nocycle;
drop table partition_maintenance;
create table partition_maintenance(
opid number not null,
table_owner varchar2(8),
table_name varchar2(30),
partition_name varchar2(30),
operation varchar2(10),
success char(1),
exe_date date,
exec_by varchar2(30) default 'automatic',
errormsg varchar2(512)
);
alter table partition_maintenance
add constraint part_maint_pk primary key (opid);
connect scott/tiger
set serveroutput on
CREATE OR REPLACE PROCEDURE DROP_PARTITIONS ( towner IN VARCHAR2, tname IN VARCHAR2) AUTHID CURRENT_USER AS
PNAME DBA_TAB_PARTITIONS.PARTITION_NAME%TYPE;
L_DATA LONG;
V_HVD DATE;
V_PURGE_DATE DATE;
SQLTORUN VARCHAR2(200);
CURSOR PART_NAME
IS
SELECT PARTITION_NAME
FROM DBA_TAB_PARTITIONS
WHERE TABLE_NAME = UPPER(tname)
AND TABLE_OWNER = UPPER(towner)
AND INTERVAL='YES'
ORDER BY partition_position;
BEGIN
OPEN PART_NAME;
FETCH PART_NAME INTO PNAME;
IF PART_NAME%ROWCOUNT = 0 THEN
dbms_output.put_line('no such table as ' || UPPER(towner) ||'.'||UPPER(tname) );
INSERT INTO PARTITION_MAINTENANCE (OPID, TABLE_OWNER,TABLE_NAME,PARTITION_NAME, OPERATION, SUCCESS, EXE_DATE, ERRORMSG)
VALUES (PART_MAINT_SEQ.NEXTVAL,UPPER(towner),UPPER(tname),PNAME ,'DROP','N', SYSDATE, 'No table such as '|| towner || '.' || tname );
COMMIT;
END IF;
WHILE PART_NAME%FOUND
LOOP
--DBMS_OUTPUT.PUT_LINE( pname );
SELECT HIGH_VALUE
INTO L_DATA
FROM DBA_TAB_PARTITIONS
WHERE TABLE_OWNER= UPPER(towner)
AND TABLE_NAME = UPPER(tname)
AND PARTITION_NAME = PNAME;
--dbms_output.put_line('partition name: ' || pname || ' ' || trim (substr ( l_data, 12, 10 ) ) );
V_HVD := TO_DATE(TRIM (SUBSTR ( L_DATA, 12, 10 )) ,'YYYY-MM-DD');
-- dbms_output.put_line('high value date: ' || v_hvd);
V_PURGE_DATE := TRUNC(SYSDATE)-35;
--dbms_output.put_line('purge date: ' || v_purge_date);
IF V_HVD < V_PURGE_DATE THEN
DBMS_OUTPUT.PUT_LINE('partition ' || PNAME ||' too old, high value date for partition is: ' || V_HVD);
-- drop statement goes here
SQLTORUN := 'alter table ' || towner || '.' || tname || ' drop partition ' || PNAME || ' UPDATE INDEXES';
DBMS_OUTPUT.PUT_LINE(SQLTORUN);
EXECUTE IMMEDIATE SQLTORUN;
-- logging to a separate table goes here
INSERT INTO PARTITION_MAINTENANCE (OPID, TABLE_OWNER,TABLE_NAME,PARTITION_NAME, OPERATION, SUCCESS, EXE_DATE, ERRORMSG)
VALUES (PART_MAINT_SEQ.NEXTVAL,UPPER(towner),UPPER(tname),PNAME ,'DROP','Y', SYSDATE, 'Partition ' || pname || ' of table ' || towner || '.' || tname || ' was dropped.');
COMMIT;
END IF;
FETCH PART_NAME INTO PNAME;
END LOOP;
CLOSE PART_NAME;
END;
/
Finally, create a program of type "STORED_PROCEDURE", define its arguments, and create a job that executes the program on a regular basis:
whenever sqlerror continue
set serveroutput on
BEGIN
DBMS_SCHEDULER.DROP_JOB(
job_name => 'DROP_PARTITION_5WEEK'
);
DBMS_SCHEDULER.DROP_PROGRAM(
program_name => 'DROP_PARTITION_PROG'
);
DBMS_SCHEDULER.create_program (
program_name => 'DROP_PARTITION_PROG',
program_type => 'STORED_PROCEDURE',
program_action => 'DROP_PARTITIONS',
number_of_arguments => 2,
enabled => FALSE,
comments => 'Program to drop partitions with contents older than 35 days..');
DBMS_SCHEDULER.define_program_argument (
program_name => 'DROP_PARTITION_PROG',
argument_name => 'towner',
argument_position => 1,
argument_type => 'VARCHAR2',
default_value => 'SCOTT');
DBMS_SCHEDULER.define_program_argument (
program_name => 'DROP_PARTITION_PROG',
argument_name => 'tname',
argument_position => 2,
argument_type => 'VARCHAR2',
default_value => 'SALES');
DBMS_SCHEDULER.enable( name => 'DROP_PARTITION_PROG');
DBMS_SCHEDULER.CREATE_JOB
(
job_name => 'DROP_PARTITION_5WEEK',
program_name => 'DROP_PARTITION_PROG',
start_date => TO_TIMESTAMP_TZ('2015/05/26 21:45:00.000000 +02:00','yyyy/mm/dd hh24:mi:ss.ff tzh:tzm'),
repeat_interval => 'FREQ=WEEKLY;',
end_date => NULL,
enabled => TRUE,
comments => 'Job will execute the program drop_partitions.');
END;
/
tdpoconf showenvas a non-root user (typically the user owning the oracle database software):
tdpoconf showenv IBM Tivoli Storage Manager for Databases: Data Protection for Oracle Version 6, Release 3, Level 0.0 (C) Copyright IBM Corporation 1997, 2011. All rights reserved. ANU2534E Option file error.
chmod 644 /usr/tivoli/tsm/client/oracle/bin64/tdpo.opt chmod 644 /usr/tivoli/tsm/client/api/bin64/dsm.sys
ANS1217E (RC409) Server name not found in System Options File
ANS1087E (RC106) Access to the specified file or directory is denied
su - cd /var/adm/ chmod 755 log cd log chmod 777 tdpoerror.log dsmerror.log
tdpoconf showenvas a non-root user:
ANS1035S (RC406) Options file '*' could not be found, or it cannot be read.
su - chmod 644 /usr/tivoli/tsm/client/api/bin64/dsm.opt chmod 644 /usr/tivoli/tsm/client/api/bin64/dsm.sys
ANS1025E (RC137) Session rejected: Authentication failure
tdpoconf passwd
current password new password confirm new password
tdpoconf passwd
Starting Oracle Universal Installer... No pre-requisite checks found in oraparam.ini, no system pre-requisite checks will be executed. Preparing to launch Oracle Universal Installer from /tmp/OraInstall2015-05-20_08-51-59AM. Please wait ... Oracle Universal Installer, Version 10.2.0.4.0 Production Copyright (C) 1999, 2008, Oracle. All rights reserved. Starting deinstall Deinstall in progress (Wednesday, May 20, 2015 8:52:24 AM CEST) Configuration assistant "iSQL*Plus Configuration Assistant" succeeded Configuration assistant "Oracle Database Configuration Assistant" succeeded Configuration assistant "Oracle Net Configuration Assistant - Deinstall Script" failed ............................................................................................................... 100% Done. Deinstall successful End of install phases.(Wednesday, May 20, 2015 8:56:17 AM CEST) End of deinstallations Please check '/u01/oracle/oraInventory/logs/silentInstall2015-05-20_08-51-59AM.log' for more details.To verify the deinstallation, check the oracle inventory, in my case /u01/oracle/oraInventory/ContentsXML/inventory.xml
cd /u01/oracle/product rm -rf 10.2.0.4
cd /tmp
# first perform a trial run
/u01/oracle/product/11203/deinstall/deinstall -checkonly
# do the actual deinstall
/u01/oracle/product/11203/deinstall/deinstall
alter database add logfile group 2 ( '/u01/app/oracle/flash_recovery_area/mydb/onlinelog/redo02a.log', '/u01/app/oracle/oradata/mydb/onlinelog/redo02b.log' ) size 50M;
ORA-00301: error in adding log file /u03/oradata/arutvt/redo03.log - file cannot be created,
alter database add logfile group 3 ('/u03/oradata/mydb/redo03.log') size 1024M REUSE;
To add another member to an already existing group:ALTER DATABASE ADD LOGFILE MEMBER '/u03/oradata/mydb/redo03.log' TO GROUP 3;If the redo log file member is already present on disk, use reuse:
ALTER DATABASE ADD LOGFILE MEMBER '/u03/oradata/mydb/redo3b.log' REUSE TO GROUP 3;
alter database add logfile '/rdodata/mydb/redo04.log' size 2048M;It will create group number 4 for you, even if you do not explicitly say so:
SYS@cdb>SQL>@redo
GROUP# MEMBER MB ARC STATUS SEQUENCE#
---------- -------------------------------------------------- ---------- --- ---------------- ----------
1 /rdodata/mydbredo01.log 2048 YES INACTIVE 220
2 /rdodata/mydb/redo02.log 2048 YES INACTIVE 221
3 /rdodata/mydb/redo03.log 2048 NO CURRENT 222
4 /rdodata/mydb/redo04.log 2048 YES UNUSED 0