-- Admin권한으로 원하는 테이블의 컬럼 정보를 확인한다.
SELECT a.OWNER, a.TABLE_NAME, a.COLUMN_NAME, b.COMMENTS,
a.data_type || '(' || a.data_length || ')' AS COLUMN_TYPE
FROM dba_tab_columns a, dba_col_comments b
WHERE a.owner = 'OPS$USR001'
AND a.table_name = 'tbUser'
AND b.owner = 'OPS$USR001'
AND b.table_name = 'tbUser'
AND a.owner = b.owner
AND a.table_name = b.table_name
AND a.column_name = b.column_name
;

--owner는 조회하고자 하는 테이블 정보의 소유자 정보를 넣으면 되고 table_name에서는 조회하고자 하는 테이블 명을 입력한다.


--user 권한으로 원하는 테이블의 컬럼 정보를 조회한다.
SELECT TABLE_NAME
, COLUMN_NAME
, Replace(COMMENTS,' ','')
FROM USER_COL_COMMENTS
WHERE TABLE_NAME = ''tbUser';

--로그인된 사용자가 소유한 테이블의 컬럼에 대한 정보를 조회한다.
또 오라클.. -_-;;

이번엔 윈도우 오라클이..


고객이 연락와서 데이터가 안올라 온다고 해서 확인해 봤더니..
상기와 같은 오류가...




사실 난 이대로 안하고 걍.. TS의 MAX 사이즈만 수정해주고 해결했는데..

알아둬야 할것 같아서.. 쩝..
아침에 출근해서 담배한대 피고 있는데..
고객이 전화와서 데이터가 한개도 안올라 온다고.. 쩝..
확인해 보니 이런 에러가..

어딘가 시스템이 트랜젝션이 제대로 안먹고 있나본데.. 쯧..

시스템을 첨부터 일일이 뜯어볼수도 없고.. 젠장.. 쯧...



다음 내용은 절대적인 것은 아님을 밝혀둔다.

예전에 우리 회사 대리가 밑에 개발자들 참고하라고 살짝 간단히 정리해 준건데..
살짝 코멘트를 달아 보았다.

참고하면 괜찮을듯..



다 아시는 내용이지만 Procedure 사용에서 락 발생 다수 시 조치 사항입니다

1. TEMP 테이블 사용을 제한 - TEMP테이블의 경우 부하가 많은경우 락 발생이 급격하게 늘어나기 때문에 사용은 최소화 한다.
->
사실 그닥 좋은 방법이 아님은 누구나 다 알것이다.
다량의 DB작업을 하면서 임시로 쓰는것은 뭐 괜찮지만.
프로시져나 프로그램 내에서 Temp 테이블을 사용하는것은 결코 좋은 방법이 아니다.

2. 다이나믹 쿼리의 제한 - 차라리 조회 조건에서 select 을 전부 써버리는 것이 더 났습니다.
->
이 부분은 노코멘트..
사실 뭐가 성능향상에 좋은지 잘 모르겠다.
실상 테이블명이나 필드명등의 객체명이 유동적일때 다이나믹 쿼리를 자주 사용하는데..
걍 select를 다 해줘버려라.. 훔....
말했던대로 노코멘트.


3. 함수를 사용할 경우 다수의 값을 받아오는 경우에는 함수를 사용하기보다도 JOIN사용이 더 낫습니다.

함수를 사용할 경우 2건 이상인 경우에는 1건 1건씩 리턴값을 주기 때문에 리턴값이 늘어날 경우 점점 더 느려지게 됩니다.
->
예를 들어서 사번을 가지고 이름을 가져오고 메일주소를 가져올때..
보통 사번과 이름, 이메일 주소는 하나의 테이블에 있을것이다.
사원테이블 조인해서 이메일 주소와 이름을 가져오면 되는데.
함수를 사용하면 사원테이블에 접속해서 이름을 가져오고, 또 사원테이블에 접속해서 이메일 주소를 가져와야 한다. 두번 접속하게 된다.
당근.. 성능에는 치명적이다.



4. 잘 쓰지 않고 건수가 적더라도 테이블에는 반드시 인덱스를 잡는다. 실 예로 8건 밖에 안되는 코드성 테이블에 인덱스 잡는 것으로 전체 시스템 성능이 5-6배가 된 경우도 있습니다.
->
뭐 다들 알테니깐..

하지만 트랜젝션 처리가 빈번한 테이블에 인텍스는 치명적이라는 것도 알테고..

뭐 적당히 테이블 분위기 봐서 블루스를 추던 탱고를 추던 살사를 추던 해야 겠지..

원격지에서 방화벽 오픈을 해서 오라클 서버에 접속할 경우 1521 포트가 아닌 랜덤하게 포트가 발생하는 경우가 종종 생긴다.


뭐 그쪽에 전문가가 아니라서 원인이나 그런건 잘 모르겠지만..


일단 해결방법은 레지스트리를 건드려 주면 된다나.... 훔..



HKEY_LOCAL_MACHINE>SOFTWARE>ORACLE>HOME0>USE_SHARED_SOCKET (값:TRUE)




이전에 다른 프로젝트팀에서 이런 문제가 발생해서 이렇게 해결했다는데..


아직 직접 적용시켜 본적이 없어서.. 킁....
MS에서 닷넷관련 기술서적을 무료로 배포하네요.



무료 기술 서적 - ASP.NET Step by Step (한글 번역본)
링크 : 다운

무료 기술 서적 - Visual Basic .NET Step by Step (한글 번역본)
링크 : 다운

무료 기술 서적 - Upgrading Microsoft Visual Basic 6.0 to Microsoft Visual Basic .NET (한글 번역본)
링크 : 다운



공부해야지.. 공부... -_-;;


출처 : 태오 사이트
Table 정보 조회하기

select * from all_tables
- 모든 테이블 조회
select * from user_tables
- 로그인된 user의 테이블 조회
(= select * from tab)


Column 정보 조회하기

select * from user_tab_columns



이거 찾아서 한참 헤맸다는.. 쿨럭... -_-;;


예를 들어서..

여러테이블에 특정 필드의 값을 수정해야 하는 프로시져를 작성한다면..

다음과 같이 작성할수 있지 않을까..

CREATE OR REPLACE Procedure sp_field_change
(
R_TEXT OUT VARCHAR2
,V_F_1 IN VARCHAR2 --변경대상 값
,V_T_2 IN VARCHAR2 --변경할 값
) IS
V_SQL VARCHAR2(1000);
T_RET VARCHAR2(5000);

begin

DECLARE
CURSOR TAB_INFO IS
SELECT A.TABLE_NAME, A.COLUMN_NAME, A.DATA_TYPE
FROM USER_TAB_COLUMNS A, TAB B
WHERE A.TABLE_NAME = B.TNAME
AND B.TABTYPE = 'TABLE';
BEGIN

T_RET := '';

FOR TAB_INFO_VAL IN TAB_INFO
LOOP
IF TAB_INFO_VAL.DATA_TYPE = 'VARCHAR2' THEN
-- 변경 대상 값과 데이터 타입이 같은것만 체크
V_SQL := 'UPDATE ' || TAB_INFO_VAL.TABLE_NAME || ' SET ' || TAB_INFO_VAL.COLUMN_NAME || ' = ''' || V_T_2 || '''';
V_SQL := V_SQL || ' WHERE ' || TAB_INFO_VAL.COLUMN_NAME || ' = ''' || V_F_1 || '''';

EXECUTE IMMEDIATE V_SQL;
IF SQL%FOUND THEN
T_RET := T_RET || '_' || V_SQL;
END IF;

END IF;
END LOOP;
END;
IF T_RET = '' THEN
R_TEXT := V_F_1;
ELSE
R_TEXT := T_RET;
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
R_TEXT := 'ERROR => ' || SQLERRM;
end sp_field_change;


물론 잘짜진 건지는 모르겠다.

제대로 동작하니 뭐.. ㅋㅋㅋ

어짜피 프로그램에 쓸건 아니구 갠적으로 업무처리 할때만 쓸꺼니깐..

쩝..
우선 풀백업을 받으시구요..

그후

EXEC sp_detach_db 'pubs', 'true'

로 해당 DB를 잠시 떼어내세요..

그러면 탐색기로 ldf 화일의 삭제가 가능해 집니다.

그후 mdf 화일 하나만 남은 상태에서..

EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:Program FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'

이런 식으로 mdf 화일 하나만으로 복구를 진행 하세요.

그러면? ldf 화일이 최소 크기인 0.5 메가로 재생성 될 겁니다.


참고로 풀백업.. 필수..

출처 : .....

+ Recent posts