oracle lock 확인 및 제거


--락걸린 테이블 확인
SELECT  do.object_name,  do.owner,  do.object_type,  do.owner,
  vo.xidusn,  vo.session_id,  vo.locked_mode
FROM
  v$locked_object vo ,  dba_objects do
WHERE   vo.object_id = do.object_id ;
  
 
--해당테이블이 락에 걸렸는지.. 
SELECT   A.SID,  A.SERIAL#,  B.TYPE,  C.OBJECT_NAME
FROM   V$SESSION A,  V$LOCK B,  DBA_OBJECTS C
WHERE   A.SID=B.SID AND  B.ID1=C.OBJECT_ID
   AND  B.TYPE='TM'  AND  C.OBJECT_NAME IN ('테이블명');
    
 
 /* 락발생 사용자와 sql, object 조회 */

SELECT   distinct x.session_id,  a.serial#,
  d.object_name,  a.machine,  a.terminal,
  a.program,  b.address,  b.piece,  b.sql_text
FROM  v$locked_object x,  v$session a,  v$sqltext b,  dba_objects d
WHERE  x.session_id = a.sid  and
  x.object_id = d.object_id  and
  a.sql_address = b.address 
order by b.address,b.piece;

 

/* 락 발생 사용자확인 */

SELECT   distinct x.session_id,  a.serial#,
  d.object_name,  a.machine,  a.terminal,  a.program,
  a.logon_time ,  'alter system kill session ''' || a.sid || ',  ' || a.serial# || ''';'
FROM   gv$locked_object x, gv$session a,  dba_objects d
WHERE   x.session_id = a.sid  and  x.object_id = d.object_id
order by logon_time; 


/* 접속 사용자 제거 */

--alter system kill session 'session_id,serial#';
alter system kill session '26,6044'; 

 

 

/* 현재 접속자의 sql 분석 */

SELECT   distinct a.sid,  a.serial#,
  a.machine,  a.terminal,  a.program,
  b.address,  b.piece,  b.sql_text
FROM   v$session a,  v$sqltext b
WHERE   a.sql_address = b.address
order by a.sid, a.serial#,b.address,b.piece;

 

CHAR

고정길이의 문자 DATA를 4000 Byte 저장할 수 있다.

 Ex) CHAR(8)

ABCDE

 →

A

B

C

D

E

 

 

 

 

VARCHAR2

가변길이의 문자 DATA를 4000 Byte 저장할 수 있다.

 Ex) VARCHAR2(8)

ABCDE

 →

A

B

C

D

E

 

NUMBER

 숫자값을 -38 자리수 ~ +38 자리수를 저장할 수 있다.

 Ex) NUMBER(8)

12345

 →

1

2

3

4

5

 

NUMBER(P, s)

P는 전체 자리수 , S는 소수점 이하 자리수

 Ex) NUMBER(8.2)

123456.12

 →

1

2

3

4

5

6.

1

2

 

BLOB(LONG RAW)

Binary 데이터를 4 GB 저장할 수 있다

 

CLOB(LONG)

Text 데이터를 4 GB 저장할 수 있다.

 

DATE

날짜값을 저장할 수 있다. 초단위까지 저장가능.

2008-Feb-07

 →

2008-Feb-07

 

TIMESTAMP

년,월,일,시,분,초, Mili-Second까지 보여준다.

2008-Feb-07

 →

2008-Feb-07 7.20.10.0000001 AM

 

TIMESTAMP WITH TIME ZONE

지역시간과 세계표준시의 차이난 시간정보를 보여줌, +9:00는 그리니치 시간보다 9시간 빠르다는 의미.

2008-Feb-07

 → 

2008-Feb-07 7:20:10 +9:00

 

TIMESTAMP WITH LOCAL ZONE

지역시간으로 변환하여 저장해 줍니다.

2008-Feb-07

 →

2008-Feb-07 7:20:10 AM

 

INTERVAL YEAR TO MONTH

정의된 시간대로 날자를 계산하여 저장 해준다.

INTERVAL '312-2' YEAR(3) TO MONTH

 →

2008-Feb-07

 


 MSSQL *
UPDATE table_a
   SET table_a.column_a = table_b.column_b
  FROM table_a,
            table_b, 
 WHERE table_a.userid  = table_b.userid
 
 
* 오라클 *
UPDATE table_a
   SET column_a = column_b
 WHERE userid IN (SELECT userid
                    FROM b)
UPDATE table_a
   SET (column_1, column__2) = (SELECT column_a, column_b
                                  FROM table_b
                                 WHERE join_column_1 = table_a.join_column_a);
UPDATE table_a
   SET column_1 = (SELECT COLUMN
                     FROM table_b
                    WHERE userid = table_a.userid);
UPDATE table_a
   SET (column_1) = (SELECT COLUMN
                       FROM table_b
                      WHERE userid = table_a.userid AND url IS NOT NULL); 

제 9 장. Table변경/삭제

Column 추가
TABLE 에 새로운 COLUMN 을 추가한다.
A LTER TABLE table명
ADD (column명 type(size) [DEFAULT value] [column_constraint], ...........) ;

 
[ 예제 ]
S_REGION TABLE 에 다음과 같은 COLUMN 을 추가하시오.

COMMENTS VARCHAR2(25)
A LTER TABLE S_REGION
ADD (COMMENTS VARCHAR2(25))
(추가될 COLUMN 의 위치는 지정할 수 없다. 새로운 COLUMN 은 마지막 위치에 생성된다.)


Column 변경
A LTER TABLE 문장의 MODIFY 절을 사용하여 다음과 같은 변경을 할 수 있다.
COLUMN 의 크기를 확장할 수 있다.
데이타가 들어있지 않으면 COLUMN 의 크기를 줄일 수 있다.
데이타가 들어있지 않다면 COLUMN 의 타입을 수정할 수 있다.
COLUMN 에 NULL 값이 없다면 NOT NULL CONSTRAINT 를 지정할 수 있다.
DEFAULT VALUE 를 변경할 수 있다.
이미 생성되어 있는 COLUMN 을 변경한다.
A LTER TABLE table명
MODIFY (column명 type(size) [DEFAULT value] [NOT NULL], .............) ;

 
Constraint 추가
이미 생성되어 있는 TABLE 에 CONSTRAINT 를 추가한다.
A LTER TABLE table명
ADD (table_constraint) ;


[ 예제 ]
S_EMP TABLE 에 다음과 같은 CONSTRAINT 를 추가하시오.
MANAGER_ID COLUMN 이 S_EMP TABLE 의 ID COLUMN 을 REFERENCE 하는 FOREIGN KEY CONSTRAINT 를 추가하시오.

A LTER TABLE S_EMP
ADD (CONSTRAINT S_EMP_MANAGER_ID_FK FOREIGN KEY(MANAGER_ID)
REFERENCES S_EMP(ID)) ;


Constraint 삭제
이미 생성되어 있는 TABLE 의 CONSTRAINT 를 삭제한다.
A LTER TABLE table명
D ROP PRIMARY KEY |
UNIQUE(column명) |
CONSTRAINT constraint명 [CASCADE] ;


[ 예제 ]
S_EMP TABLE 의 다음과 같은 CONSTRAINT 를 삭제하시오.
MANAGER_ID COLUMN 의 FOREIGN KEY CONSTRAINT

A LTER TABLE S_EMP
D ROP CONSTRAINT S_EMP_MANAGER_ID_FK ;


전체 데이타의 삭제
T RUNCATE 문장은 DDL 이다.
ROLLBACK SEGMENT 를 만들지 않고 모든 데이타를 삭제한다.
데이타가 삭제된 FREE 영역은 환원된다.
TABLE 로부터 모든 데이타를 삭제한다.
T RUNCATE TABLE table명 ;


[ 예제 ]
S_ITEM TABLE 의 모든 데이타를 삭제하시오.

T RUNCATE TABLE S_ITEM ;


Constraint disable/enable
TABLE 에 있는 모든 데이타가 CONSTRAINT 를 만족시켜야 ENABLE 할 수 있다.
PRIMARY KEY, UNIQUE CONSTRAINT 를 ENABLE 하면 그에 따른 INDEX FILE 이 자동적으로 생성된다.
CASCADE OPTION 은 FOREIGN KEY CONSTRAINT 를 DISABLE 할 때 사용한다.
CONSTRAINT 를 삭제하고 새로 만들지 않고 DISABLE, ENABLE 한다.
A LTER TABLE table명
DISABLE | ENABLE PRIMARY KEY |
UNIQUE(column명) |
CONSTRAINT constraint명 [CASCADE] ;


[ 예제 ]
S_DEPT TABLE 의 PRIMARY KEY CONSTRAINT 를 DISABLE 시키시오.

A LTER TABLE S_DEPT
DISABLE CONSTRAINT S_DEPT_ID_PK CASCADE;
S_EMP TABLE 의 S_EMP_DEPT_ID_FK CONSTRAINT 도 자동적으로 DISABLE 된다.

 
Table 삭제
TABLE 을 삭제하면 그 TABLE 에 딸린 INDEX FILE 도 삭제된다.
VIEW, SYNONYM, STORED PROCEDURE, FUNCTION, TRIGGER 등은 삭제되지 않는다.
CASCADE CONSTRAINTS 는 모 TABLE 을 삭제하고 자 TABLE 의 FOREIGN KEY CONSTRAINT 도 삭제한다.
D ROP TABLE table명 [CASCADE CONSTRAINTS] ;


[ 예제 ]
S_DEPT TABLE 을 삭제하시오.

D ROP TABLE S_DEPT CASCADE CONSTRAINTS ;


이름의 변경
TABLE, VIEW, SEQUENCE, SYNONYM 의 이름을 변경한다.
RENAME old명 TO new명 ;


[ 예제 ]
S_ORD TABLE 의 이름을 S_ORDER 로 변경하시오.

RENAME S_ORD TO S_ORDER ;


@ if문.
 * 1이맞으면 출력해라.
declare
 i_con number:=1;
begin
 if i_con=1 then
dbms_output.put_line('맞고마이~');
 end if;
end;
/

@ if..else문.
 * 1보다 크면 '1보다크다', else는 '1보다크지 않아요'
declare
 i_con number:=2;
begin
 if i_con>1 then
dbms_output.put_line('1보다 큽니다');
else
dbms_output.put_line('1보다 크지않아요');
end if;
end;
/
 * 1보다 크면 '1보다커요',1과 같으면 '1과 같아요',
  else는 '1보다크지 않아요'
declare
 i_con number:=1;
begin
 if i_con>1 then
dbms_output.put_line('1보다 커요.');
elsif i_con=1 then
dbms_output.put_line('1과 같아요');
else
dbms_output.put_line('1보다 크지않아요');
end if;
end;
/
===============
 

@ loop문.
 * 변수에 1을 더한 값을 출력.(20까지 출력)
declare
i_num number:=0;
begin
loop
i_num:=i_num+1;
dbms_output.put_line(i_num);
exit when i_num=20;           *exit when : 끝나는 지점.
end loop;
end;
/

 

@ for문.
 * 1~20까지의 홀수만 출력해라.
declare
i_num number:=0;
begin
for i_num in 1..20 loop
if(mod(i_num,2)=1) then
dbms_output.put_line(i_num);
end if;
end loop;
end;
/

---------

 

@ while문.
 * 별 찍기.
declare
i_num number:=1;
i_str varchar2(20):=null;
begin
while i_num<10 loop
i_str:=i_str||'*';
dbms_output.put_line(i_str);
i_num:=i_num+1;
end loop;
end;
/

-------------------

+ Recent posts