Oracle Database 실습 3

Oracle Database 실습 3입니다. XEPDB1 접속, 일반 사용자 생성, 최소 권한 부여, 테이블 생성, CRUD, commit/rollback, 객체 확인을 SQL 중심으로 정리했습니다.

Oracle Database 실습 3: PDB 접속, 사용자 생성, 기본 SQL 실습

Oracle Database 실습 2에서 XE 설치와 listener 검증까지 끝난 뒤, 실제로 pluggable database에 접속해서 실습 계정을 만들고 테이블을 생성하는 단계다. Oracle XE는 기본적으로 container database와 pluggable database 구조를 사용하므로, XEXEPDB1의 차이를 먼저 이해해야 한다.

일반 애플리케이션 계정과 테이블은 보통 CDB$ROOT가 아니라 XEPDB1 같은 PDB 안에 만든다. root container에 실습 사용자를 무작정 만들면 이후 접속 문자열, 권한, 객체 위치가 헷갈린다.

접속 대상 구분

서비스의미주 사용처
XEcontainer database rootDBA 관리, PDB 상태 확인
XEPDB1기본 pluggable database애플리케이션 계정, 테이블, SQL 실습
localhost:1521/XEPDB1listener를 통한 Easy Connect 문자열SQL*Plus, SQL Developer, 애플리케이션 접속

1. Oracle 환경 변수 확인

su - oracle
source /etc/profile.d/oracle-xe.sh

echo "$ORACLE_HOME"
echo "$ORACLE_SID"
sqlplus -v
lsnrctl status

2. SYSDBA로 접속해서 PDB 상태 확인

sqlplus / as sysdba
show con_name;
show pdbs;

select name, open_mode
from v$pdbs
order by name;

XEPDB1OPEN_MODEREAD WRITE인지 확인한다. 닫혀 있다면 실습 전에 열어 둔다.

alter pluggable database XEPDB1 open;
alter pluggable database XEPDB1 save state;
show pdbs;

3. PDB로 컨테이너 전환

실습 계정은 XEPDB1 안에 만들기 위해 세션 컨테이너를 바꾼다.

alter session set container = XEPDB1;
show con_name;

4. 실습 사용자 생성

아래 예시는 APPUSER라는 일반 계정을 만든다. 비밀번호는 예시 문자열을 그대로 쓰지 말고 랩에서 새로 정한 값을 입력한다. 운영 환경에서는 profile, password policy, 최소 권한을 별도로 설계해야 한다.

create user appuser identified by "Change_This_In_Your_Lab";

alter user appuser quota 100M on users;

grant create session,
 create table,
 create sequence,
 create view
to appuser;

권한 확인은 DBA 계정에서 다음처럼 한다.

select username, account_status, default_tablespace
from dba_users
where username = 'APPUSER';

select privilege
from dba_sys_privs
where grantee = 'APPUSER'
order by privilege;

5. APPUSER로 접속

listener를 통한 접속을 확인한다. 이 단계가 성공해야 실제 애플리케이션 접속도 정상일 가능성이 높다.

sqlplus appuser@localhost:1521/XEPDB1
show user;
select sys_context('USERENV', 'CON_NAME') as con_name from dual;

6. 테이블 생성

서버 인벤토리를 예제로 간단한 테이블을 만든다. 숫자 기본키, 서버명, 역할, IP, 생성 시간을 포함한다.

create table server_inventory (
 server_id number generated by default as identity primary key,
 server_name varchar2(64) not null,
 server_role varchar2(64) not null,
 ip_address varchar2(45) not null,
 created_at timestamp default systimestamp not null
);

7. 데이터 입력과 조회

insert into server_inventory (server_name, server_role, ip_address)
values ('oracle-lab-01', 'database', '192.168.56.50');

insert into server_inventory (server_name, server_role, ip_address)
values ('web-lab-01', 'web', '192.168.56.60');

commit;

select server_id, server_name, server_role, ip_address, created_at
from server_inventory
order by server_id;

8. 수정, 삭제, rollback 확인

SQL 실습에서는 commitrollback의 차이를 반드시 확인한다.

update server_inventory
set server_role = 'oracle-xe'
where server_name = 'oracle-lab-01';

select server_name, server_role
from server_inventory
where server_name = 'oracle-lab-01';

rollback;

select server_name, server_role
from server_inventory
where server_name = 'oracle-lab-01';

삭제도 같은 방식으로 transaction을 확인한다.

delete from server_inventory
where server_name = 'web-lab-01';

select count(*) as row_count from server_inventory;

rollback;

select count(*) as row_count from server_inventory;

9. 객체와 저장 공간 확인

select object_name, object_type, status
from user_objects
order by object_type, object_name;

select segment_name, segment_type, bytes / 1024 / 1024 as mb
from user_segments
order by mb desc;

자주 나는 오류

오류원인확인
ORA-01017계정 또는 비밀번호 오류접속 대상 service, 계정 상태, 대소문자 확인
ORA-01950tablespace quota 없음alter user appuser quota 100M on users 적용
ORA-01031권한 부족create table, create sequence 등 필요한 권한 확인
ORA-65096CDB root에서 common user 규칙 위반alter session set container = XEPDB1 후 사용자 생성

정리

Oracle XE 실습에서는 먼저 XEPDB1에 접속하고, 그 안에 일반 사용자와 테이블을 만드는 습관을 잡는 것이 중요하다. sqlplus / as sysdba는 관리 접속이고, appuser@localhost:1521/XEPDB1는 애플리케이션 계정 접속이다. 이 둘을 구분하면 이후 권한, 백업, Data Pump, 애플리케이션 연결 실습이 훨씬 명확해진다.

문서 링크

BGM EVER