[an error occurred while processing this directive]
1. Create the primary key constraint (disabled)
alter table DEPT add ( constraint PK_DEPT primary key (DEPTNO)) disable primary key;2. Create a unique index with the same name & columns as the primary key
create unique index PK_DEPT on DEPT (DEPTNO) tablespace DATA_1 storage (initial 10M next 1M pctincrease 0) parallel (degree 5) unrecoverable;3. Enable the primary key
alter table DEPT enable primary key;
Export / Import using named pipe with compress
To export to a compressed file:
/etc/mknod pipename p compress < pipename > newfilename.Z & exp <username>/<password> file=pipename rm -f pipenameTo import from a compressed file:
/etc/mknod pipename p uncompress < newfilename.Z > pipename & imp <username>/<password> file=pipename rm -f pipename
Building a bogus table
create table a (a1 number, a2 varchar2(50)); insert into a values (555,'I am a unique and extraordinary individual'); insert into a select * from a; -- insert 1 row insert into a select * from a; -- insert 2 rows insert into a select * from a; -- insert 4 rows insert into a select * from a; -- insert 8 rows insert into a select * from a; -- insert 16 rows insert into a select * from a; -- insert 32 rows insert into a select * from a; -- insert 64 rows insert into a select * from a; -- insert 128 rows insert into a select * from a; -- insert 256 rows insert into a select * from a; -- insert 512 rows insert into a select * from a; -- insert 1024 rows insert into a select * from a; -- insert 2048 rows update a set a1 = mod(rownum*1551,4096); commit; alter table a add constraint pk_a primary key (a1); select count(*) from a; -- 4096 rows
Decreasing size of column (which contains data)
Let's say you want to decrease ENAME from VARCHAR2(10) to VARCHAR2(7)
Oracle allows you to increase the size of a column but does not allow you to decrease the size of a column.
Here's a way to decrease the size of a column which contains data.
SQL> desc emp
Name Null? Type
------------------------------- -------- ----
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
drop table FIX_IT;
create table FIX_IT as select rowid rowid_xx, ENAME from EMP;
create index FIX_IT on FIX_IT (rowid_xx);
alter table EMP modify (ENAME NULL);
update EMP set ENAME = NULL;
alter table EMP modify (ENAME VARCHAR2(7));
update EMP set ENAME = (
select ENAME from FIX_IT where rowid_xx = EMP.rowid);
drop table FIX_IT;
Long Deletes (committing every x number of records)
set time on
set echo on
declare
cnt number(7) := 0;
tot number(7) := 0;
cursor C1 is select rowid from <OWNER>.<TABLE_NAME>
where <YOUR CRITERIA>;
begin
for REC in C1 loop
delete from <OWNER>.<TABLE_NAME>
where rowid = REC.rowid;
tot := tot + 1;
cnt := cnt + 1;
if (cnt >= 1000) then
commit;
cnt := 0;
end if;
end loop;
commit;
dbms_output.put_line('<YOUR TABLE> records deleted: '||tot);
end;
/
Identify and remove duplicate records
Identify duplicate records:
select COL1, COL2, COL#, COUNT(*) from <OWNER>.<TABLE_NAME> group by COL1, COL2, COL# having count(*) > 1;
delete from <OWNER>.<TABLE_NAME> a
where rowid < (
select max(rowid)
from <OWNER>.<TABLE_NAME> b
where b.COL1 = a.COL1
and b.COL2 = a.COL2
and b.COL# = a.COL#);
delete from <OWNER>.<TABLE_NAME>
where rowid in (
select rowid
from <OWNER>.<TABLE_NAME>
minus
select max(rowid)
from <OWNER>.<TABLE_NAME> b group by b.COL1, b.COL2,b.COL#);
Display Installed Products & Version
This will show you everything installed and its version for your defined $ORACLE_HOME.
Make sure your $ORACLE_HOME variable is set correctly.
cd $ORACLE_HOME/orainst ./inspdver
My other Oracle pages
Stewart McGlaughlin
Oracle DBA
http://www.oracle-books.com/oracle/tips.html