2010년 2월 26일 금요일

Purge

RECYCLE BIN은 drop된 object 들이 상주하는 곳이다.
drop된 object 도 같은 공간을 차지하고 있다.
만일 emp table이 users tablespace 에 생성되었다면 drop된 emp table도 users tablespaces 내에 남아 있다.
drop된 table과 그와 관련된 objects들 (indexes,constraints,다른 관련된 objects 등)은 없어지지 않고
BIN$$가 첫머리에 추가되어 다른 이름으로 변경되어 있다..

SQL> select segment_name,tablespace_name from user_segments
2 where segment_name like '%EMP%';

EMP USERS

SQL> select index_name,tablespace_name from user_indexes
2 where table_name ='EMP';

SYS_C004335 USERS

SQL> drop table emp;

Table dropped.

SQL> select object_name,ORIGINAL_NAME,ts_name from recyclebin;

BIN$153amJrNRj3gMEWYESkisg==$0 EMP USERS

BIN$153amJrMRj3gMEWYESkisg==$0 SYS_C004335 USERS

Flashback Query 를 사용하여 drop한 table의 data 를 query 할수 있다.
각 user는 table을 drop하기전과 동일한 권한을 가지고 있다.
Recycle Bin에서 drop한된 table들을 볼 수 있다.
Recycle Bin내의 object 들은 drop된 object의 owner가 purge command를 이용해서 삭제하기전 까지
db내에 남아 있으나 다음의 경우에는 자동적으로 purge 된다.


user 가 quota초과를 일으키는 새로운 table을 생성하거나 data 가 추가되는 경우나
tablespace가 create 나 insert 작업을 수용하기 위해 file size를 확장할 필요가 있을 경우

drop된 table에 대한 부분은 8i/9i와 동일하나 space 부분만 즉시 release 되지 않는다.
tablespace 나 user 를 drop하는 경우에는 recycling 되지 않는다.

EXAMPLE
=======

SQL> select * from v$version;

BANNER


Oracle Database 10g Enterprise Edition Release 10.1.0.2.0 - Prod
PL/SQL Release 10.1.0.2.0 - Production
CORE 10.1.0.2.0 Production
TNS for Linux: Version 10.1.0.2.0 - Production
NLSRTL Version 10.1.0.2.0 - Production

SQL> show user
USER is "SCOTT"

SQL> SELECT object_name,original_name,operation,type,dropscn,droptime
2 FROM user_recyclebin;

no rows selected

SQL> CREATE TABLE t1(a NUMBER);

Table created.

SQL> DROP TABLE t1;

Table dropped.

SQL> SELECT object_name,original_name,operation,type,dropscn,droptime
2 FROM user_recyclebin;

OBJECT_NAME ORIGINAL_NAME OPERATION


--------------------------------
TYPE DROPSCN DROPTIME

----------
BIN$153amJrPRj3gMEWYESkisg==$0 T1 DROP
TABLE 2350013 2004-04-09:17:33:29

SQL> conn sys/manager as sysdba
Connected.

SQL> show user
USER is "SYS"

SQL> SELECT owner,original_name,operation,type FROM dba_recyclebin;

OWNER ORIGINAL_NAME OPERATION

--------------------------------
TYPE

SCOTT T1 DROP
TABLE

drop된 table은(BIN$$ table) recover (restore, flashback) 되기 전까지는 어떤 operation도 불가능 하다.
이 상황에서는 동일 이름으로 table 을 생성하는 것도 가능하다.

drop된 table 의 정보는 다음과 같이 볼수도 있다.

SQL> show user
USER is "SCOTT"

SQL> SELECT table_name,tablespace_name
2 FROM user_tables WHERE dropped='YES';

TABLE_NAME TABLESPACE_NAME

------------------------------
BIN$153amJrPRj3gMEWYESkisg==$0 USERS

PURGING
=======
DB내에서 table을 완전히 삭제하고자 할 때 사용하며 space 도 release 된다.

Command 는
Scott user 에서

SQL> PURGE TABLE t1;
Table purged.

OR

SQL> purge table "BIN$153amJrPRj3gMEWYESkisg==$0";

Table purged.

From SYSDBA user:

SQL> SELECT owner,original_name,operation,type FROM dba_recyclebin;

no rows selected


Scott user:
SQL> show recyclebin
SQL>

Purge 하는 여러 방법은 다음과 같다.

PURGE TABLE t1;
PURGE INDEX ind1;
PURGE recyclebin; (Recyclebin내의 모든 objects 를 purge:해당 owner 의 object 만 purge )
PURGE dba_recyclebin; (sysdba권한으로 모든 object 를 purge)
PURGE TABLESPACE users; (해당 tablespace 내의 모든 objects 를 purge )
PURGE TABLESPACE users USER scott; (scott user 에 속하는 users tablespace 내의 object 들을 Purge)

RECYCLEBIN Dsiable 방법
==========================
하나의 command 로 drop과 purge 를 함께 할 수 있다.

Scott user:
SQL> DROP TABLE t1 PURGE;
Table dropped.

SQL> SELECT * FROM recyclebin;
no rows selected

이 경우에는 purge 가 필요 없다.

recycling 기능을 없애는 방법은 "_recyclebin" 을 FALSE 로 setting 하면 된다.
default는 TRUE 이다 .

SYSDBA user:
SQL> SELECT a.ksppinm, b.ksppstvl, b.ksppstdf FROM x$ksppi a, x$ksppcv b
2 WHERE a.indx = b.indx AND a.ksppinm like '%recycle%'
3 ORDER BY a.ksppinm;


출처 : http://kr.forums.oracle.com/forums/thread.jspa?threadID=477120&tstart=105

Purge DOC : http://download-west.oracle.com/docs/cd/B14117_01/server.101/b10759/statements_9018.htm 

2010년 2월 21일 일요일

listener.ora

INSTANCE 확인 = SID
SQL> select instance from v$thread; INSTANCE -------------------------------------------------------------------------------- orcl10
DB_NAME 확인 
SQL> select name from v$database; NAME --------- ORCL10
* listener.ora
# listener.ora Network Configuration File: /opt/oracle10/oracle10/10g/network/admin/listener.ora # Generated by Oracle configuration tools. LOCAL_OS_Authentication_listener = OFF LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 115.145.212.179 )(PORT = 1521)) ) )
SID_LIST_
LISTENER = (SID_LIST = (SID_DESC = (ORACLE_HOME = /opt/oracle10/oracle10/10g) (SID_NAME = orcl10) ) )

* tnsnames.ora
# tnsnames.ora Network Configuration File: /u01/app/oracle/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora # Generated by Oracle configuration tools. ORCL10 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 115.145.212.179)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl10) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) )

2010년 2월 16일 화요일

linux memory cache flush

echo 3 > /proc/sys/vm/drop_caches

-- 해당 명령어를 shell 에서 입력하면 memory 에 적재되 있던 cache 가 flush 된다.  

2010년 2월 15일 월요일

Flush Buffer Pool

1. ALTIBASE
alter system flush buffer_pool;

2. ORACLE
alter system flush buffer_cache; -- 10g, 11g

-- 모든 Buffer Pool 의 내용을 Disk 로 flush 하고 Buffer 를 비운다.

TABLESPACE DROP / OFFLINE

1. OS 상에서 직접 *.dbf 파일을 삭제하였을때

iSQL(sysdba)> startup control
Connecting to the DB server.... Connected.


TRANSITION TO PHASE : PROCESS


TRANSITION TO PHASE : CONTROL
Command execute success.
iSQL(sysdba)> alter tablespace 데이터파일이름 discard; -- tablespace 를 offline 상태로 변경
Alter success.
iSQL(sysdba)> startup service
iSQL(sysdba)> drop tablespace 데이터파일이름 including contents; -- tablespace drop 수행
Drop success.

2010년 2월 10일 수요일

ERR-31001ALTIBASE 5.3.x 버전 설치시 parse error

altibase_home 에 알티베이스 압축을 푼후 altibase_install.sh 하여 설치를 하다보면 DataBase 생성부분에서

[ERR-31001 : SQL syntax error

line 1: parse error
create database MYDB INITSIZE=10M noarchivelog

에러가 발생할수 있다.

해결방법 :

1. 설치를 종료후 isql 을 구동시킨다.
[altibase@ljh8324-skku altibase_home]$ isql -u sys -p manager -sysdba
-----------------------------------------------------------------
     Altibase Client Query utility.
     Release Version 5.3.3.3
     Copyright 2000, ALTIBASE Corporation or its subsidiaries.
     All Rights Reserved.
-----------------------------------------------------------------
ISQL_CONNECTION = UNIX, SERVER = 127.0.0.1, PORT_NO = 20300
[ERR-910FB : Connected to idle instance]

2. startup process 까지 서버를 구동시킨다.

iSQL(sysdba)> startup process
Connecting to the DB server... Connected.

3. Database 를 생성한다. ( 생성 구문에 character set 를 지정한다. )

iSQL(sysdba)> create database mydb initsize=10M noarchivelog character set ko16ksc5601 national character set utf16;
DB Info (Page Size     = 32768)
        (Page Count    = 257)
        (Total DB Size = 8421376)
        (DB File Size  = 1073741824)
Creating MMDB FILES     [SUCCESS
Creating Catalog Tables [SUCCESS]
Creating DRDB FILES     [SUCCESS]
  [SM] Rebuilding Indices [Total Count:0]  [SUCCESS]
DB Writing Completed. All Done.
Create success.



4. shutdown abort 후 startup
 


2010년 2월 3일 수요일

NTILE

Purpose

NTILE is an analytic function. It divides an ordered data set into a number of buckets indicated by expr and assigns the appropriate bucket number to each row. The buckets are numbered 1 through expr. The expr value must resolve to a positive constant for each partition. Oracle Database expects an integer, and if expr is a noninteger constant, then Oracle truncates the value to an integer. The return value is NUMBER.

The number of rows in the buckets can differ by at most 1. The remainder values (the remainder of number of rows divided by buckets) are distributed one for each bucket, starting with bucket 1.

If expr is greater than the number of rows, then a number of buckets equal to the number of rows will be filled, and the remaining buckets will be empty.

You cannot use NTILE or any other analytic function for expr. That is, you cannot nest analytic functions, but you can use other built-in function expressions for expr.


Examples

The following example divides into 4 buckets the values in the salary column of the oe.employees table from Department 100. The salary column has 6 values in this department, so the two extra values (the remainder of 6 / 4) are allocated to buckets 1 and 2, which therefore have one more value than buckets 3 or 4.

SELECT last_name, salary, NTILE(4) OVER (ORDER BY salary DESC) AS quartile FROM employees WHERE department_id = 100;
LAST_NAME SALARY QUARTILE ------------------------- ---------- ---------- Greenberg 12000 1 Faviet 9000 1 Chen 8200 2 Urman 7800 2 Sciarra 7700 3 Popp 6900 4


http://download-west.oracle.com/docs/cd/B12037_01/server.101/b10759/functions091.htm 
번역 : http://www.statwith.pe.kr/ORACLE/functions091.htm

 

2010년 2월 2일 화요일

RANDOM

RANDOM
구문
       RANDOM (number)
설명
       의사 랜덤 정수형 값(pseudo random INTEGER value)을 반환한다.
       반환 범위는 0 부터 INTEGER 형의 최대값이다.
       number 가 0 이 아닌 값이면 random seed 값을 주어진 number 로
       세팅한 다음, 의사 랜덤 정수를 돌려준다. 같은 seed 값을 가진
       RANDOM 함수를 중복해서 부르면, 같은 값이 반환된다.
예제
       <질의>
          iSQL> SELECT RANDOM(0) FROM dual;
          RANDOM(0)
          --------------
          16838
          1 row selected.
       <질의>
          iSQL> SELECT RANDOM(100) FROM dual;
          RANDOM(100)
          --------------
          12662
          1 row selected.


2010년 2월 1일 월요일

Optimizer Parameter

1. Cost Model 변경
alter session set "_optimizer_cost_model" = io;
alter session set "_optimizer_cost_model" = cpu;
alter session set "_optimizer_cost_model" = choose;

2. dbf 파일을 먼저 삭제하고 startup 하였을때 .
 - ORA-01157: cannot identify/lock data file 10 - see DBWR trace file

alter database datafile '/hdd/dbf/test1.dbf' offline drop;

3. tablespace 정보 확인

select FILE_NAME, TABLESPACE_NAME,BYTES,MAXBYTES from dba_data_files;
select FILE_NAME,TABLESPACE_NAME from dba_data_files;