database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
ㆍSybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Sybase Q&A 1468 게시물 읽기
No. 1468
tempdb 에서의 #TEMP_TABLE 없애기 방법문의
작성자
작성일
2006-03-22 19:07
조회수
6,457

(운영환경: WAS, WSED, SYBASE 12.5)

 

임시테이블을...

 

SELECT column.......

into #T_TMP01

FROM table....

WHERE ...

AND ....

 

잘 만들어 사용하다가..

 

특정화면에서 위의 생성한 #T_TMP01 이 존재한다고....그래서 좀 찾아보니..

 

temp 테이블은 해당 session 이 생성하고, session 종료가 되면 자동으로 삭제가 되거나,

 

강제로 drop table #T_TMP01 하면..되는데...

 

 

문제는 그렇게 프로그램을 코딩하고, 실행하고.. 하다가.. 갑자기 "이미존재합니다..."하고 했을경우..

 

DBA 가 tempdb 에서 temp 테이블을 깨끗하게 지우는 방법이 없는지요?

 

단순히 use tempdb 하고 delete from sysobjects where name = '#T_TMP01' 하면 안될것 같은데 말입니다.

 

특정 session을 찾아서 그 session 을 kill 시키면 될듯도 한데...어떤 session 인지 찾는방법도..모르겠고..

 

설마

dbcc traceon(3604)

go

dbcc log (tempdb,objectid,0,0,0,-1,0) <- 뭘 하는지 모르겠지만..여기 찾아보니..

go

 

이걸로 session 을 찾는건 아닌듯 하고.. 메시지가 그리 많이 안나오더라구요.

 

 

정리하면...

 

특정 session 이 만든 temp 테이블을 깨끗하게 지울수 있는 방법이 뭔가요?

 

감사합니다.

 

 

 

이 글에 대한 댓글이 총 3건 있습니다.

WAS에서는 connection pool을 이용하기 때문에,

동시 사용자가 있는 상황에서

#temp 테이블을 사용하는 경우

이런 상황이 발생하는 경우가 가끔 있는 것 같습니다.

 

문제 해결은 간단한데,

WAS에서 요청되는 SQL문을 stored procedure로 변환해서

미리 DB에 생성해 놓으시고,

WAS에서는 프로시저를 호출하도록 하십시오.

 

프로시저는 이런식으로 만드시구요.

 

create procedure myproc

(@arg1 char(1)..)

as

SELECT column.......

into #T_TMP01

FROM table....

WHERE ...

AND ....

 

select * from #T_TMP01

 

drop table #T_TMP01

return

 

 

WAS에서는

execute myproc 'A'

 

 

또한, 임시 테이블명을 너무 길게 만들지 않도록 하세요.

table명 뒤에 Session_ID 등의 꼬리표가 붙을 때에 동일 세션에서 테이블명을 길게 쓸경우 앞글자를 자르게 되는데, 이때 테이블이 이미 존재한다는 situation이 발생할 수도 있습니다.

 

WAS를 이용하여 ASE DB를 사용한다면, 되도록 모든 SQL문을 프로시저로 생성하도록 해 보세요.

성능 향상과 parsing 절약, 로직 수정 등 잇점이 많습니다.

SQL문 변경하고서 WAS를 restart 하는 곳을 많이 보게 됩니다.

 

도움이 되셨기를.

존넘님이 2006-03-22 21:37에 작성한 댓글입니다. Edit

select * into #rr from table_name

이라면

use tempdb

go

select name from sysobjects where type = 'U'

go

#rr__________00000190009940754

 

라면

여기서 19 가 이 temp table을 생성한 spid값인것으로 알고 있습니다.

한번 테스트해보시면....

기린님이 2006-03-23 09:17에 작성한 댓글입니다. Edit

기린님이 말씀하신 사항을 테스트해보니...딱 맞네여..

 

존넘님이 말씀하신건 새로운 화면 만들때 고려를 해보야 할 듯 합니다.

 

다시한번 감사합니다. 꾸벅

홍님이 2006-03-23 09:43에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1471substring으로 자를 때 한글깨지는 경우 [4]
히끄리
2006-03-23
5855
1470유닉스 사이베이스 서버를 외부에서 모니터링하는방법 [1]
남선우
2006-03-23
3813
1469Sybase 종류에 대한 버전 궁금 [1]
아라클러
2006-03-23
5508
1468tempdb 에서의 #TEMP_TABLE 없애기 방법문의 [3]
2006-03-22
6457
1467SP 에디터.. [2]
황상구
2006-03-22
3899
1466AutoCommit에 대해서질문 [1]
이병진
2006-03-22
3666
1465load 사용시 " 처리 [2]
박철
2006-03-21
3709
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.019초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다