asynch_io
를 꺼야 성능이 좋아진다는 내용docker run -d --name==oracle11gr2 \ -p 49161:1521 \ -p 49180:8080 \ -e ORACLE_ALLOW_REMOTE=true -e ORACLE_DISABLE_ASYNCH_IO=true # 필수!! all_objects 조회를 위해서. wnameless/oracle-xe-11g-r2
hostname: localhost port: 49161 # container port 1521 sid: xe username: system password: oracle
http://localhost:<dockerport>/apex/apex_admin
접속# container port 8080 username: ADMIN password: admin
docker exec -it -u oracle:dba oracle11gr2 /bin/bash # sqlplus 실행 sqlplus "SYS/oracle" AS SYSDBA
-- Table Sapace 추가 CREATE TABLESPACE <tablespace_name> DATAFILE '<tablespace_name>.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M; CREATE USER <username> IDENTIFIED BY <password> DEFAULT TABLESPACE <tablespace_name> QUOTA UNLIMITED ON <tablespace_name> TEMPORARY TABLESPACE TEMP; GRANT CONNECT, RESOURCE TO <username>;
<username>
사용자로 접속해서 작업한다.system
계정으로는 작업하지 말 것.SELECT * FROM V$VERSION; SELECT version FROM V$INSTANCE;
SELECT * FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%'; -- NLS_CHARACTERSET : AL32UTF8 -- NLS_NCHAR_CHARACTERSET : AL16UTF16 SELECT VALUE$ FROM sys.props$ WHERE name='NLS_LANGUAGE'; SELECT * FROM nls_database_parameters WHERE parameter = 'NLS_LANGUAGE' -- AMERICAN
KO16MSWIN949
로 변경하는 예인데, 되도록 AL32UTF8
사용할 것.UPDATE props$ SET VALUE$='KO16MSWIN949' WHERE name='NLS_CHARACTERSET'; UPDATE props$ SET VALUE$='AL16UTF16' WHERE name='NLS_NCHAR_CHARACTERSET'; UPDATE sys.props$ SET VALUE$='KOREAN_KOREA.UTF8' WHERE name='NLS_LANGUAGE'; commit; -- 모든 데이터베이스에 일괄 적용. 아래 작업을 안하면 오류 발생했음. -- ORA-06552: PL/SQL: Compilation unit analysis terminated -- ORA-06553: PLS-553: 알 수 없는 문자 집합 이름입니다 -- ORA-06553: PLS-553: character set name is not recognized ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; ALTER SYSTEM SET AQ_TM_PROCESSES=0; ALTER DATABASE CHARACTER SET INTERNAL_USE KO16MSWIN949; ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL16UTF16; -- 재시작 shutdown IMMEDIATE startup
KO16KSC5601
: 완성형 한글, 한글2350글자. 한글 2bytes 차지KO16MSWIN949
: CP949, 모든 한글 표현, 한글 2bytes 차지AL32UTF8
: UTF-8, 한글 3bytes 차지CONNECT
: DB 접속 권한RESOURCE
: 객체(생성, 수정, 삭제), 데이터(입력, 수정, 조회, 삭제) 권한DBA
: 절대 권력?-- 부여 GRANT SELECT, INSERT, DELETE, UPDATE ON [TABLE NAME] TO [USER]; -- 해제 REVOKE SELECT, INSERT, DELETE, UPDATE ON [TABLE NAME] FROM [USER];
ORA-00972: identifier is too long(Oracle 데이터베이스 오류 972: ORA-00972: 식별자가 너무 깁니다)
UTF-8
은 한 글자가 3byte 혹은 CP949
일 경우에는 2byte를 차지하기 때문에 생각보다 길어지게 된다.