사용자를 생성하거나 변경시에는 반드시 SYSTEM사용자로 접속후 실행해야 합니다.
SYSTEM 계정에서 계정생성
sql>CREATE USER 아이디 IDENTIFIED BY 패스워드;
-- 아이디와 패스워드로 사용자를 생성합니다.
sql>GRANT connect, resource to 아이디;
-- 아이디 사용자에게 접속권한과 모든 권한을 줍니다.
※ sql>GRANT dba TO leejunsik;
--leejunsik 사용자에게 dba 권한을 줍니다.
SYSTEM 계정에서 계정확인
sql>show user;
--현재 계정의 이름을 출력합니다.(sqlplus에서만 실행가능)
sql>select user from dual;
--현재 계정의 이름을 출력합니다.(모든 관리툴에서 실행가능)
sql>select * from all_users;
-- 현재 oracle서버의 모든 계정을 보여줍니다.(아이디명,사용자아이디,만든날짜_모든계정에
서 실행 가능)
-- 패스워드는 알수 없습니다.
sql> select USERNAME,CREATED,DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE
from
dba_users where username not in('SYS','SYSTEM');
sql>select username,account_status from dba_users;
--현재 oracle서버의 모든 계정을 보여줍니다.(상세정보출력_SYSTEM계정에서만 실행 가능)
※ ACCOUNT_STATUS 컬럼값으로 해당 계정이 LOCK상태인지 UNLOCK(OPEN)상태인지 알수 있습니다.
SYSTEM 계정에서 계정수정(패스워드)
sql>alter user leejunsik identified by leejunsik2;
--leejunsik계정의 패스워드를 leejunsik2로 수정합니다
SYSTEM 계정에서 계정삭제(세션이 없을때)
사용자 계정 삭제는 system계정에서 해야 하며 drop user 계정명으로 삭제명령을
내립니다.하지만 해당 계정의 table이 존재하면 삭제가 불가능하여 모든 table을 삭제한후
계정을 삭제해야 합니다.
sql>drop user leejunsik;
--leejunsik계정을 삭제합니다. 해당 계정에 데이타가 없어야 합니다.
sql>drop user cascade;
--leejunsik계정을 삭제합니다. 해당 계정에 데이타가 있어도 무시하고 삭제
SYSTEM 계정에서 계정삭제(세션이 있을때)
drop user 사용자계정명; 으로 삭제를 하지만 데이타가 하나라도 있다면
삭제가 안됩니다.그래서 cascade옵션으로 삭제를 합니다.
sql>drop user cascade;
하지만 이때 해당 사용자 계정의 데이타를 사용중일때는 삭제가 안됩니다.
이때는 데이타를 사용중인 사용자세션을 수동으로 삭제해야 합니다.
사용자가 연결되었다고 나오면 아래방법으로 세션을 삭제합니다.
1.system계정에서 모든 세션의 정보를 출력합니다.
select sid,serial#,username from v$session;
2.username으로 삭제할 sid와 serial#값을 알아내어 삭제를 합니다.
sql>alter system kill session '18,159';
--18은 sid이며 159는 serial#입니다.
3.모든 세션을 삭제후에 drop user 계정명 cascade;으로 사용자를
삭제합니다.
LEEJUN 계정을 만든후 SCOTT계정의 테이블을 그대로 복사하여 LEEJUN 계정으로 복사하기
가장 간단히 특정 유저의 테이블들을 복사할 수 있는 방법은 EXP,IMP 유틸을 이용하는 방법이며 아래의 경우는 같은 DB서버에 계정이 있을때만 가능합니다.
먼저 LEEJUN이라는 유저를 생성합니다.
>CREATE USER RMAN IDENTIFIED BY LEEJUN;
기본권한 GRANT
>GRANT CONNECT,RESOURCE TO LEEJUN;
SCOTT유저의 테이블을 EXP받음
>EXP SCOTT/TIGER@SID FILE=TEST.DMP
LEEJUN유저에게 IMP
>IMP RMAN/RMAN@SID FILE=TEST.DMP fromuser=scott touser=LEEJUN
계정생성후 leejunsik계정으로 접속
방법1)
sqlplus을 실행하고 계정입력후 로그인
방법2)
로컬db에 접속시
원도우 도스창>sqlplus leejunsik/leejunsik
--로컬db에 접속시 위의 방법은 가능합니다.
원격db에 접속시 잘못된 명령
원도우 도스창>sqlplus leejunsik/leejunsik
--원격db에 접속시 위의 방법은 불가능합니다.
원격db에 접속시 잘된 명령
원도우 도스창>sqlplus leejunsik/leejunsik@SID
--원격DB에 접속시 호스트 문자열(SID) 꼭 써줘야 합니다.
방법3)
로컬 db에서 다른 계정에 접속되어있는 상태(sqlplus)에서 connect 접속할아이디/접속할패스워드 명령으로 계정 전환이 가능하지만 원격db에서 다른 계정에 접속(sqlplus)되어있는 상태에서는 계정 전환이 안됩니다. 왜냐하면 호스트 문자열(SID)을 입력해야 하는데 입력이 불가능하기 때문.
SQL*PLUS에서 @SID의 의미
sqlplus username/password <- 디폴트로 설정되어 있는 SID로 연결합니다.
sqlplus username/password@sid_name <- sid_name 의 SID로 연결합니다.
SQL*PLUS에서 @SID를 붙이고 접속시 아래의 에러가 난다면
ORA-12154: TNS:could not resolve service name
@ 뒤에 붙는 것은 tnsnames.ora 에 정의 되어 있는 접속 주소 입니다.
위 같이 에러가 나는 것은 tnsnames.ora 파일에 정의를 하지 않았거나 다른 이름으로 정의 해놓았기 때문일겁니다. $ORACLE_HOME/network/admin 아래에 보면 tnsnames.ora파일을 확인해보기시 바랍니