2013.04.11 15:07

1. USER_TABLES : 테이블정보

2. USER_TAB_COLUMNS : 컬럼정보

3. USER_OBJECTS : 모든 오브젝트의 정보를 알려줌

4. USER_VIEWS : 뷰에 대한 정보

5. USER_SYNONYMS : 동의의 정보

6. USER_SEQUENCES : 시퀀스 정보

7. USER_CONSTRAINTS : 제약조건에 대한 정보

8. USER_CONS_COLUMNS : 제약조건에 대한 컬럼정보

9. USER_TAB_COMMENTS : 테이블/뷰에 대한 주석

10. USER_COL_COMMENTS : 컬럼에 대한 주석

11. USER_INDEXES : 인덱스에 대한 정보

12. USER_IND_COLUMNS : 인덱스 컬럼에 대한 정보

13. USER_CLUSTERS : 클러스터에 대한 정보

14. USER_DB_LINKS : 데이터베이스 링크 정보

15. USER_TRIGGERS : 트리거 정보

16. USER_SOURCE : 프로시저, 함수, 패키지 정보

17. USER_ERRORS : 코드 에러에 대한 정보

18. USER_TABLESPACES : 테이블 스페이스 정보

19. USER_USERS : 사용자에 대한 정보

20. USER_TAB_PRIVS : 테이블 권한에 대한 정보

21. USER_COL_PRIVS : 테이블열 권한에 대한 정보

22. USER_SYS_PRIVS : 시스템 권한에 대한 정보


select * from USER_SOURCE where text=''

 

 

Posted by 물색없는세상
2012.12.11 09:49

OS : Windows XP
프로그램 및 버전 : Oralce11g

※ 주의사항 : 없음

1. 증상
오라클 특정 유저 패스워드 변경 후 처음에는 로그인이 잘 되었는데 어느순간 부터 ORA-28000 : the account is locked 오류 발생

2. 원인
특정 유저 패스워드 변경 후 수시로 DB에 접속하는 프로그램에서 변경된 패스워드를 반영하지 않았음. 프로그램에서 계속 잘못된 패스워드로 접속을 시도하였고 오라클 설정에 따라 자동으로 특정 유저가 LOCK됨.



3. 해결방법

1) USER 패스워드 만료 상태 확인하기

1. system계정으로 로그인 하여 다음을 입력 한다.
C:\> sqlplus "/as sysdba" --system계정으로 로그인
...
SQL> select * from dba_users; --DB유저 정보 확인하기

2. ACCOUNT_STATUS컬럼을 확인한다.
- OPEN : 정상
- LOCKED(TIMED) : 패스워드 설정 횟수 이상 잘못입력하여 잠김
- EXPIRED & LOCKED : 패스워드 기간이 만료되어 잠김
...
접속 시 오류난 유저의 ACCOUNT_STATUS컬럼을 보면 LOCKED(TIMED)으로 되어 있을 것 이다.


2) LOCK걸린 유저 UNLOCK하기

1. system계정으로 로그인 하여 다음을 입력 한다.
C:\> sqlplus "/as sysdab" --system계정으로 로그인
...
SQL> alter user 유저명 account unlock; --LOCK걸린 유저 UNLOCK하기

2. LOCK되었던 유저로 로그인을 확인한다.



3. 결과
우리가 은행에서 현금 인출할 때 비밀번호를 3번이상 잘못 입력하면 은행에 가서 풀어야 하는 것처럼 오라클도 이러한 기능을 제공을 하는 것 같다.
보안상 좋은 기능이지만 어찌보면 굉장히 위험한 기능인 것 같다. 외부에서 누군가가 악한 마음을 갖고 잘못된 패스워드로
계속 접근을 시도해서 유저를 LOCK시켜 버린다면... 에효... 물론 이에 대한 해결방안이 있겠지만... 나중에 찾아봐야겠다.

4. 추가로 알아보기
그럼 과연 몇번 패스워드 입력을 실패하면 LOCK이 걸릴까? 한번 알아보았음.

1) 패스워드 LOCK횟수 확인하기

1. system계정으로 로그인 하여 다음을 입력 한다.
C:\> sqlplus "/as sysdab" --system계정으로 로그인
...
SQL> SELECT U.USERNAME,P.PROFILE, P.RESOURCE_NAME, P.LIMIT
FROM DBA_USERS U, DBA_PROFILES P WHERE P.PROFILE=U.PROFILE
AND RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS';
...

2. 위 sql문을 입력 하면 계정별로 몇번의 패스워드 실패시 LOCK이 되는지 확인할 수 있다.

 

 

http://www.happytomorrow.net/116

Posted by 물색없는세상
2012.10.26 14:21

declare
@StartDate datetime = '2010-01-25',
@EndDate datetime = '2010-02-05'

select GETDATE()  
select dateadd(day, 10, @StartDate), dateadd(day, -10, @StartDate)
select datediff(day, @StartDate, @EndDate), datediff(month, @StartDate, @EndDate)
select datepart(year,@StartDate), datepart(month,@StartDate) ,datepart(day,@StartDate)
select year(@StartDate), month(@StartDate), day(@StartDate)

 

'Database > Mssql' 카테고리의 다른 글

data관련 함수  (0) 2012.10.26
개행문자 치환쿼리  (0) 2012.09.06
Posted by 물색없는세상
2012.10.12 16:40

제약조건 (Constraint)

제약조건이란 테이블에 부적절한 자료가 입력되는 것을 방지하기 위해서 여러 가지 규칙을 적용해 놓는거라 생각하면 됩니다. 간단하게 테이블안에서 테이터의 성격을 정의하는 것이 바로 제약조건 입니다.

데이터의 무결성 유지를 위하여 사용자가 지정할 수 있는 성질 입니다.

모든 CONSTRAINT는 데이터 사전(DICTIONARY)에 저장 됩니다.

★ 의미있는 이름을 부여했다면 CONSTRAINT를 쉽게 참조할 수 있습니다.

★ 표준 객체 명명법을 따르는 것이 좋습니다.

★ 제약조건은 테이블을 생성할 당시에 지정할 수도 있고, 테이블 생성 후 구조변경(ALTER)명령어를
통해서도 추가가 가능합니다.

★ NOT NULL제약조건은 반드시 컬럼 레벨에서만 정의가 가능합니다.


NOT NULL 조건
: 컬럼을 필수 필드화 시킬 때 사용합니다.


SQL> CREATE TABLE emp(
ename VARCHAR2(20) CONSTRAINT emp_nn_ename NOT NULL );
이런식으로 하면 ename 컬럼에는 꼭 데이터를 입력해야만 합니다.

여기서 emp_nn_ename은 (테이블이름_제약조건이름_컬럼이름) 형식으로
CONSTRAINT NAME을 정의 합니다.

CONSTRAINT NAME은 USER_CONSTRAINTS 뷰(VIEW)를 통해서 확인할수 있습니다.

SQL> SELECT CONSTRAINT_NAME
FROM USER_CONSTRAINTS
WHERE TABLE_NAME ='EMP' ;

CONSTRAINT_NAME
-----------------------
emp_nn_ename 이런 식으로 제약사항의 이름을 확인할수 있습니다.



UNIQUE 조건
:
데이터의 유일성을 보장(중복되는 데이터가 존재할수 없습니다.)
자동으로 index가 생성됩니다.


SQL> ALTER TABLE emp
ADD CONSTRAINT emp_uk_deptno UNIQUE (deptno) ;

테이블이 변경되었습니다.

이런식으로 하면 deptno 컬럼에 중복된 데이터가 들어갈 수 없습니다.

-- 제약 조건의 삭제

SQL>ALTER TABLE emp
DROP CONSTRAINT emp_uk_deptno ;

테이블이 변경되었습니다.



CHECK 조건 :
컬럼의 값을 어떤 특정 범위로 제한할 수 있습니다.


SQL>ALTER TABLE emp
ADD CONSTRAINT emp_ck_comm
CHECK (comm >= 10 AND comm <= 100000) ;

테이블이 변경되었습니다.

comm컬럼은 체크조건에서 제한을 하고 있으므로 1에서 100까지의 값만을 가질수 있습니다.
체크 조건에서는 IN 연산자를 사용할수 있습니다.


-- 제약 조건의 삭제

SQL>ALTER TABLE emp
DROP CONSTRAINT emp_ck_comm ;

테이블이 변경되었습니다.

SQL> ALTER TABLE emp
ADD CONSTRAINT emp_ck_comm
CHECK (comm IN (10000,20000,30000,40000,50000)) ;

테이블이 변경되었습니다.

comm 컬럼은 10000,20000,30000,40000,50000의 값만을 가질수 있습니다.



DEFAULT
(컬럼 기본값) 지정 : 데이터 입력시에 입력을 하지 않아도 지정된 값이 입력될수 있습니다.

SQL>CREATE TABLE emp(
hiredate DATE DEFAULT SYSDATE ) ;

이런식으로 하면 hiredate 컬럼에 INSERT를 하지 않아도 오늘 날짜가 들어갑니다.



PRIMARY KEY 지정
: 기본키는 UNIQUE 와 NOT NULL의 결합과 같습니다.

기본키는 그 데이터 행을 대표하는 컬럼으로서의 역할을 수행하여 다른 테이블에서
외래키들이 참조할 수 있는 키로서의 자격을 가지고 있습니다. 이를 참조 무결성이라 합니다
.

UNIQUE 조건과 마찬가지로 기본키를 정의하면 자동으로 인덱스를 생성하며
그 이름은 기본 키 제약 조건의 이름과 같습니다.


INDEX KEY
: 검색 키로서 검색 속도를 향상 시킴니다.
(UNIQUE,PRIMARY KEY 생성시 자동적으로 생김니다.)

SQL>CREATE TABLE emp(
empno NUMBER CONSTRAINT emp_pk_empno PRIMARY KEY ) ;

이런식으로 하면 empno 컬럼에 UNIQUE 제약조건과 NOT NULL제약조건을 가지게 됩니다.



FOREIGN KEY(외래 키)지정
: 기본키를 참조하는 컬럼 또는 컬럼들의 집합입니다.

※ 외래키를 가지는 컬럼의 데이터 형은 외뢰키가 참조하는 기본키의 컬럼과 데이터형이
일치해야 합니다.
이를 어기면 참조무결성 제약에의해 테이블을 생성할수 없습니다.

외래키에 의해 참조되고 있는 기본 키는 삭제할수 없다.

ON DELETE CASCADE 연산자와 함께 정의된 외래키의 데이터는 그 기본키가 삭제 될 때 같이
삭제됩니다.


SQL>ALTER TABLE emp ADD CONSTRAINT emp_fk_deptno
FOREIGN KEY (deptno) REFERENCES dept(deptno)

테이블이 변경되었습니다.

이런식으로 하면 emp 테이블의 deptno 컬럼은 dept 테이블에 deptno 컬럼을 참조하는
외래키를 가지게 됩
니다.

직접 변경해 보세요..


제약 조건의 확인

USER_CONS_COLUMNS : 컬럼에 할당된 제약 조건을 볼 수 있습니다.
USER_CONSTRAINTS : 유저가 소유한 모든 제약 조건을 불 수 있습니다.
이 두개의 데이터사전을 참조 하면 됩니다.

SQL> SELECT SUBSTR(A.COLUMN_NAME,1,15) COLUMN_NAME,  
     DECODE(B.CONSTRAINT_TYPE,
'P','PRIMARY KEY',
           'U','UNIQUE KEY',
           'C','CHECK OR NOT NULL',
'R','FOREIGN KEY') CONSTRAINT_TYPE,  
     A.CONSTRAINT_NAME   CONSTRAINT_NAME  
FROM  USER_CONS_COLUMNS  A,  USER_CONSTRAINTS  B  
WHERE  A.TABLE_NAME = UPPER('&table_name')  
AND  A.TABLE_NAME = B.TABLE_NAME  
AND  A.CONSTRAINT_NAME = B.CONSTRAINT_NAME  
ORDER BY 1;  

-- 테이블 명을 입력 하면 됩니다.
table_name의 값을 입력하십시오: emp2


COLUMN_NAME CONSTRAINT_TYPE CONSTRAINT_NAME
------------------------------ ----------------- --------------
DEPTNO CHECK OR NOT NULL SYS_C001362
FOREIGN KEY EMP2_FK_DEPTNO
EMPNO PRIMARY KEY EMP2_PK_EMPNO
ENAME CHECK OR NOT NULL EMP2_NN_ENAME
MGR UNIQUE KEY EMP2_UP_MGR

================================================
* Oracle Community OracleClub.com
* http://www.oracleclub.com
* http://www.oramaster.net
* 운영자 : 김정식 (oramaster _at_ empal.com)
================================================


- 제약조건의 기능은 MS-SQL도 비슷하지만 구문은 조금 다를 수 있다.

 

 

 

http://blog.naver.com/wangno/90152515426

'Database' 카테고리의 다른 글

제약조건 (Constraint)  (0) 2012.10.12
Posted by 물색없는세상
2012.09.06 17:58

개행문자 치환쿼리

  SELECT delivery_no
  , REPLACE(delivery_memo, char(13) + char(10), '\r\n') AS [delivery_memo]
  , REPLACE(CONVERT(varchar(MAX), delivery_memo), char(13) + char(10), '<br />') AS [delivery_memo]
  FROM delivery_setup
  WHERE delivery_no = 9

 

출처 - 본인

'Database > Mssql' 카테고리의 다른 글

data관련 함수  (0) 2012.10.26
개행문자 치환쿼리  (0) 2012.09.06
Posted by 물색없는세상
2012.03.08 15:07

MySQL 내부함수를 사용하는 방법으로..
SELECT @RNUM:=@RNUM+1 AS ROWNUM FROM (SELECT @RNUM:=0) R
쿼리를 실행해보면 ROWNUM 컬럼에 값이 1이 찍혀나온다..
이걸 응용해서..

function foo(){
 if (counter <= 10)  return;
// it works!
}
SELECT @RNUM:=@RNUM+1, R.* AS ROWNUM FROM (
  SELECT @RNUM:=0, Q.* from (
   페이징 없는 오리지널 쿼리문
  ) Q
) R limit 0, 20

'Database > Mysql' 카테고리의 다른 글

MySQL 페이징 쿼리 만들기  (0) 2012.03.08
Posted by 물색없는세상