카테고리 보관물: DEV

ORACLE JOB Schedule 등록방법

오라클에서는 유닉스의 cron tab과 비슷한 기능을 제공합니다.

오라클 자체적으로 프로시저, 패키지, 등의 object 를 oracle job queue에 등록후 스케쥴링 하여 사용할수 있습니다.

 

1. Job 관련 파라메터 확인

SELECT * FROM V$PARAMETER WHERE NAME LIKE ‘%job%’;

‘JOB_QUEUE_PROCESSES’의 값이 ‘0’ 이면 스케줄러가 작동하지 않는다.

ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 1000;

 

2. Job 등록

DECLARE
X NUMBER;
BEGIN
SYS.DBMS_JOB.SUBMIT
( job => X
,what => ‘plan_plm.T_IF_BATCH’
,next_date => to_date(‘2020-02-27 00:00:00’, ‘yyyy-mm-dd hh24:mi:ss’)
,interval => ‘TRUNC(SYSDATE+1)+6/24+30/1440’
,no_parse => TRUE
);
SYS.DBMS_OUTPUT.PUT_LINE(‘Job Number is : ‘ || to_char(x));
END;

 

– next_date : Job이 처음 실행될 시간 설정

– Interval : Job 실행 후 다음 실행 간격 설정

SYSDATE+7 : 7일에 한번 씩 job 수행

SYSDATE+1/24 : 1시간에 한번 씩 job 수행

SYSDATE+30/ : 30초에 한번 씩 job 수행(24: 시간 당, 1440(24×60):분 당, 86400(24x60x60):초 당 )

TRUNC(SYSDATE, ‘MI’)+8/24 : 최초 job 수행시간이 12:29분 일 경우 매시 12:29분에 job 수행

TRUNC(SYSDATE+1) : 매일 밤 12시에 job 수행

TRUNC(SYSDATE+1)+3/24 : 매일 오전 3시 job 수행

NEXT_DAY(TRUNC(SYSDATE),’MONDAY’)+15/25 : 매주 월요일 오후 3시 정각에 job 수행

TRUNC(LAST_DAY(SYSDATE))+1 : 매월 1일 밤 12시에 job 수행

TRUNC(LAST_DAY(SYSDATE))+1+8/24+30/1440 : 매월 1일 오전 8시 30분

 

3. Job 확인

SELECT * FROM DBA_JOBS

SELECT * FROM USER_JOBS

SELECT * FROM ALL_JOBS

 

4. Job 삭제

EXECUTE DBMS_JOB.REMOVE(job_no);

 

5. Job 변경

1) CHANGE

: Job 의 Field를 변경

EXECUTE DBMS_JOB.CHANGE(job, what, next_date, interval);

EXECUTE DBMS_JOB.CHANGE(14144, NULL, NULL, ‘SYSDATE + 3’);

 

2) WHAT

: 수행작업을 변경

EXECUTE DBMS_JOB.WHAT(job, WHAT);

EXECUTE DBMS_JOB.WHAT(14144, ‘유저명.프로시저명’);

 

3) NEXT_DATE

: 다음 수행시간 변경

EXECUTE DBMS_JOB.NEXT_DATE(job, next_date);

EXECUTE DBMS_JOB.NEXT_DATE(14144, TRUNC(SYSDATE,’MI’) + 4);

 

4) INTERVAL

: 수행 간격 변경

EXECUTE DBMS_JOB.INTERVAL(job, interval);

EXECUTE DBMS_JOB.INTERVAL(14144, TRUNC(SYSDATE,’MI’)+30/1440);

 

5) BROKEN

: 수행 중지

EXECUTE DBMS_JOB.BROKEN(14144, TRUE);

 

6) RUN

: Job을 즉시 실행. BROKEN중이어도 실행. 실행 후 정상상태로 변경

EXECUTE DBMS_JOB.RUN(job);

 

이 오라클의 job 스케쥴링을 이용하면,

서버의 이용이 낮은 새벽시간대 등에 자원이 많이 들어가는 연산을 실행시키면, 오라클 서버의 부담을 줄일수 있습니다.

Windows Oracle ODBC 설정

오라클에 ODBC 를 이용해서 접속할 수 있습니다.

(* 파워빌더 10.5 는 오라클11g 이상 버전의 Native 드라이버를 지원하지 않지만 하위 버전의 클라이언트로도 상위 버전의 서버에 접속할 수 있습니다.)

오라클 ODBC 드라이버는

MS에서 제공하는 Microsoft ODBC for Oracle 과

오라클을 설치하면 제공되는 Oracle in OraDb1Xg_home1

두 가지가 있습니다.

Oracle in OraDb1Xg_home1 는 파빌에서 접속할 때 불필요한 메시지를 보여주기 때문에

Microsoft ODBC for Oracle 사용을 권장합니다.

여기서는 두 가지 모두 다루겠습니다.

 

윈도우7 기준으로

제어판 – 시스템 및 보안 – 관리도구 – 데이터 원본(ODBC)

를 실행하십시오.

 

시스템 DSN 탭을 선택하고 추가 버튼 클릭~

1. Microsoft ODBC for Oracle 로 설정하기

목록에서 Microsoft ODBC for Oracle 을 선택합니다.

(만약 목록에 보이지 않는다면 아래 사이트를 참고해서 설치하십시오.

설치 후 처음부터 다시해야 합니다.

http://support.microsoft.com/kb/313008)

마침 클릭~

데이터 원본 이름은 임의로 작성하면 됩니다.

여기서는 TestDB_odbc 라고 합니다.

파빌에서 ODBC 접속할 때 이 이름을 사용합니다.

서버는 Tnsname.ora 파일에 등록되어 있는 로컬 네트 서비스 이름입니다.

오라클 DB 생성 후 설정 글에서 등록한 TestDB_local 을 직접 입력하십시오.

사용자 이름는 입력하지 않고 비워둡니다.

확인 버튼 클릭~

시스템 DSN 에 방금 설정한 오라클 ODBC 데이터를 볼 수 있습니다.

Data Source Name 에 작성한 TestDB_odbc 가 이름 칼럼에 나타났습니다. 

파빌에서 접속할 때 TestDB_odbc 을 사용합니다.

 

2. Oracle in OraDb1Xg_home1 로 설정하기

오라클을 설치하면 위 화면에 오라클 드라이버가 표시됩니다.

여기서는 오라클11g 가 설치되었습니다.

오라클 드라이버를 선택하고 마침 버튼 클릭~

 

Data Source Name 은 임의로 작성하면 됩니다.

여기서는 TestDB_odbc 라고 했습니다. 파빌에서 ODBC 접속할 때 이것을 사용합니다.

 

TNS Service Name 은 Tnsname.ora 파일에 등록되어 있는 로컬 네트 서비스 이름입니다.

우측의 화살표를 클릭하면 나타나는 목록에서 선택하세요.

오라클 DB 생성 후 설정 글에서 등록한 TestDB_local 을 선택하면 됩니다.

 

User ID 는 입력하지 않고 비워둡니다.

OK 버튼 클릭~

 

시스템 DSN 에 방금 설정한 오라클 ODBC 데이터를 볼 수 있습니다.

Data Source Name 에 작성한 TestDB_odbc 가 이름 칼럼에 나타났습니다. 

파빌에서 접속할 때 TestDB_odbc 을 사용합니다.

CONNECT Storage Engine Oracle연동 (My-SQL에 Oracle db 연결)

Oracle DB가 아닌 MSSQL , Postgre 등의 연결도 해당 DB에서 제공하는 Driver 들을 설치 설정하면 크게 다르지 않다.

예를 들어

가입자(회원) 정보는 Oracle DB에 있고 실제 단위 서비스에 대해서는 MariaDB or MySQL를 사용하는 경우

회원 정보 1,2명의 데이터를 처리가 아니라 수백 수천만명의 데이터를 처리 해야 하는 경우…

이럴때..

MariaDB(MySQL)에서 제공하는 CONNECT Storage Engine을 통해서

MariaDB(MySQL) –> Oracle DB로 직접 억세스 해보자.

Connect engine 구성 방법 및 순서

  1.  연결하고자 하는 대상  DB의 ODBC Driver 설치
  2.  ODBC 설치및 설정
  3.  연결테스트(ODBC-Oracle)
  4.  MariaDB(MySQL) Connected Engine Plugin 설치 및 설정 
  5.  연동 테스트(MariaDB or MySQL – Oracle) 

1. Oracle DB ODBC Driver 설치 (Oracle client 설치)

Oracle db ODBC Driver 설치를위해 OracleClient 를 설치 한다.

Oracle Client(http://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle12c-linux-12201-3608234.html) 에서 OS 및 적절한 버전의 client를 다운받는다

요즘은 이런 드라이버 하나 받으려는데 로그인이 필요하다. 불편해 죽겠다…


rpm -ivh oracleclient/oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
rpm -ivh oracleclient/oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm
rpm -ivh oracleclient/oracle-instantclient12.1-odbc-12.1.0.2.0-1.x86_64.rpm

단순하게 rpm Package를 받아 설치 한다. (우리가 필요한것은 basic, odbc 이지만 혹시 모르니 모두 설치 한다.)

참고로 zip 파일로 내려 받아 압축을 풀어 사용 할 수도 있다.

기본 설치시 Oracle client 는 /usr/lib/oracle/{version}/client64/lib/ 에 설치된다.

현재 최신 버전은 12.1 이다.  테스트 한 바로는 12.1버전을 사용시, 11 버전과 호환에 큰 문제는 없었다.

일단, 설치가 되었다면 오라클 클라이언트 Path 를 환경 변수에 잡아주자


$ vi ~/.bash_profile

$ export ORACLE_HOME=/usr/lib/oracle/12.1/client64
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib


// 저장후 이를 적용 하기 위하여 
$ source ~/.bash_profile

//환경변수 확인

$ env
LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib/:/usr/lib/oracle/12.1/client64/lib/:

2. ODBC 설치및 설정(연결테스트)

*. Windows 환경의 ODBC 설정은 “Windows Oracle ODBC 설정” 글 참조

위의 그림에도 나와 있듯이 MariaDB(MySQL)에서 제공하는 CONNECT Storage Engine 은 ODBC를 사용 하므로 Odbc를 설치 한다. (ubuntu 는 당연히 apt-get install)


[root@TESTDB ~] yum install unixODBC
[root@TESTDB ~] yum install unixODBC-devel

[수동 설치]

unixODBC 소스를 내려 받아 압축을 풀고 compile 하여 설치


$ ./configure
$ make
$ make install

설치시 기본 설치 경로는 /usr/local 이며 별도의 설치 경로를 주고자 하는 경우 컴파일시 다음 조건을 준다

예) ./configure –prefix=/usr/local/unixODBC

ODBC설정 파일(odbc.ini, odbcinst.ini)의 경로는  {prefix}/etc 에 존재 하며,

이를 변경 하고자 하는 경우  –sysconfdir 옵션을 이용 할 수 있다.

예) ./configure –sysconfdir=/etc

odbc 설정

odbc설정은 2개의 파일을 편집하여 설정 합니다.(odbc.ini, odbcinst.ini)

yum or apt-get을 이용하여 설치 한 경우 odbc.ini, odbcinst.ini 파일은 /etc 디렉토리에 있습니다.

[odbcinst.ini편집]


$ sudo vi /etc/odbcinst.ini

[Oracle]
Description = Oracle ODBC driver for Oracle
Driver = /usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1

Driver = oracle odbc client driver path

Driver = 오라클 client가 인스톨된 위치의 정확한 파일명을 주어야 합니다.

[odbc.ini편집]


$ sudo vi /etc/odbc.ini

[Oracle]
Driver = Oracle-12.1
ServerName = //192.168.0.2:1521/ORCL
UserName = system
Password = manager
Trace = yes
TraceFile = /tmp/odbc_oracle.log

Driver = Oracle (odbcinst.ini 에서 동일한 이름 사용)

ServerName = //192.168.0.2:1521/ORCL

serverName 은 oracle DB 의 정보를 정확하게 기입 합니다.

3. 연결테스트(ODBC-Oracle)

odbc 에서 제공 하는 isql툴을 이용해서 접속을 확인 합니다.


$ isql Oracle
+---------------------------------------+
| Connected!                      |
|                                 |
| sql-statement                    |
| help [tablename]                 |
| quit                             |
|                                 |
+---------------------------------------+
SQL>
SQL> select * from emp;
+-------+-----------+----------+-------+--------------------+----------
| EMPNO | ENAME     | JOB      | MGR   | HIREDATE           | SAL
+-------+-----------+----------+-------+--------------------+----------
| 7369  | SMITH     | CLERK    | 7902  | 1980-12-17 00:00:00| 800
…
+-------+-----------+----------+-------+--------------------+----------
SQLRowCount returns -1
15 rows fetched
SQL>

테이블 및 데이터 테스트 쿼리 사용 작동 확인 중 에러가 발생 하는 경우 isql –v Oracle 으로 에러메세지를 출력 하여 확인

4. MariaDB(MySQL) Connected Engine Plugin 설치 및 설정

mariadb connected engine 설치 및 활성화 Connected Engine은 mariaDB에서 plug in 형태로 제공되며, 버전 10.2 이상 상위 버전에서 지원 합니다. (10.0 이하 버전은 지원이 중단) root database 접속 후 플러그인 되어 있는 엔진 중 connect engine이 설치 되어 있고 활성화 되어 있는지 확인


$ mysql -uroot -p

MariaDB [(none)]>show engines;

+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
  | Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |
  +--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+
  | CONNECT            | YES     | Management of External Data (SQL/MED), including many file formats         | NO           | NO   | NO         |

CONNECT Engine plug-in이 설치 되어 있는지 확인한다.

CONNECT Engine plug-in이 설치 되어 있지 않을 경우 connect-engine을 설치 합니다.


//connect-engine 인스톨 후, 엔진 추가 및 확인
$ yum install mariadb-connect-engine

$ mysql -uroot -p

MariaDB [(none)]> INSTALL SONAME 'ha_connect';
MariaDB [(none)]> show engines;
+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+

| Engine             | Support | Comment                                                                    | Transactions | XA   | Savepoints |

+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+

| CSV                | YES     | CSV storage engine                                                         | NO           | NO   | NO         |

| MRG_MyISAM         | YES     | Collection of identical MyISAM tables                                      | NO           | NO   | NO         |

| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables                  | NO           | NO   | NO         |

| BLACKHOLE          | NO      | /dev/null storage engine (anything you write to it disappears)             | NULL         | NULL | NULL       |

| MyISAM             | YES     | MyISAM storage engine                                                      | NO           | NO   | NO         |

| CONNECT            | YES     | Management of External Data (SQL/MED), including many file formats         | NO           | NO   | NO         |

| InnoDB             | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES          | YES  | YES        |

| ARCHIVE            | NO      | Archive storage engine                                                     | NULL         | NULL | NULL       |

| FEDERATED          | YES     | FederatedX pluggable storage engine                                        | YES          | NO   | YES        |

| PERFORMANCE_SCHEMA | YES     | Performance Schema                                                         | NO           | NO   | NO         |

| Aria               | YES     | Crash-safe tables with MyISAM heritage                                     | NO           | NO   | NO         |

+--------------------+---------+----------------------------------------------------------------------------+--------------+------+------------+

11 rows in set (0.01 sec)

7. 연동 테스트(MariaDB or MySQL – Oracle)

이제  MariaDB에서 Oracle로 직접 연결해 보자.

MariaDB [testdb]> CREATE TABLE emp_oracle ENGINE=CONNECT CONNECTION='DSN=ORCL;UID=system;PWD=manager' `TABLE_TYPE`=ODBC `tabname`='emp' ;

Query OK, 0 rows affected (0.04 sec)


MariaDB [testdb]> select * from emp_oracle;
+-------+-----------+----------+-------+--------------------+----------
| EMPNO | ENAME     | JOB      | MGR   | HIREDATE           | SAL
+-------+-----------+----------+-------+--------------------+----------
| 7369  | SMITH     | CLERK    | 7902  | 1980-12-17 00:00:00| 800
…
+-------+-----------+----------+-------+--------------------+----------
15 rows in set (0.11 sec)

MariaDB [testdb]>

위 처럼 oracle DB의  emp Table을 직접 조회 할수 있다.  접속 유저의 권한이 있다면 Insert, Update 역시 가능하다.

한계점은 당욘히 존재 한다.

Blob/Text 등의 data Type은 지원하지 못한다.

또한, Oracle, MySQL등에서 지원하는 LinkDB , LinkedServer처럼 한번 연결로 모든 테이블 억세스는 되지 않는다.  테이블당 링크 테이블을 생성해 이용해야 한다. (이 부분은 필요한 Oracle에 view를 생성하고 이 View Table를 이용하는 편법을 이용할 수 있다)

[참고] 

테스트를 하면서 LD_LIBRARY 문제가 발생했다. 이유는 MariaDB(MySQL) 의 구동이 MySQL Damon에 의해서 실행되는데 MySQL User에 LD_LIBRARY Path 설정이 되지 않아서 발생하는 오류 였다.

이럴경우 아래와 같이 LD_LIBRARY 를 추가 할 수 있다.

[Oracle library 추가 방법]


/etc/ld.so.conf.d/ 디렉토리에 파일(*.conf)을 만들어 추가

cd  /etc/ld.so.conf.d/
vi oracle.conf
/usr/lib/oracle/12.2/client64/lib

프로젝트 중

고객에게 문자 발송 데이터를 만들어 문자 발송 시스템으로 데이터를 넣어 주어야 하는 프로젝트가 있었다,

고객 정보는 Oracle DB에 있었고,

문자 발송 대상 고객리스트는 엑셀로 전달되었다.

여러가지 문제로 해당 시스템은 MariaDB로 구성되어 있어서 엑셀로 전달되는 대상 고객 정보를 고객 DB(Oracle)에서 얻어와야 하는데 한번에 전달되는 엑셀의 고객수가 100만건이 넘었다.

고객정보 소스는 엑셀이고, 고객 ID를 이용해서 필요한 고객정보(Oracle DB)를 얻어와야 하는데  100만건이 넘는 데이터를 프로그램에서 loop 를 돌면서 처리 하기에는 속도의 문제가 있었으나 Connected engine을 이용해 query 한번으로 처리 할수 있었다…

MySQL DB-Link 구현을 위한 FEDERATED 엔진 활성화 및 테이블 생성

Oracle 과 MSSQL에 있는 DB Link 서비스를 MySQL에서 지원하는 FEDERATED 엔진을 이용하여 구현하는 방법 입니다.

1. 설치되어 있는 엔진 확인

– CentOS에서 yum 으로 설치했을때 기본적으로 사용 가능한 엔지들의 목록 입니다.

2. 엔진을 사용할 수 있도록 설치

 

3. FEDERATED 엔진의 설치여부 확인

– FEDERATED 엔진이 목록에 표시되지만 사용 가능하지 않은 상태 입니다.

4. 엔진 사용 가능 하도록 my.cnf 수정

– [mysqld] 하위에  federated 항목을 추가 합니다.

5. 엔진의 상태를 확인 합니다.

– FEDERATED 엔진의 Support 상태가 YES 로 변경 되었습니다.

—————————– FEDERATED 엔진을 사용하여 테이블을 생성하여 원격지 테이블과 연결 ————————-

1. 원격지에 테이블을 생성 합니다.

CREATE TABLE `cityholic_db`.`cart_product` (

`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘아이디’,

`users_id` bigint(20) unsigned NOT NULL COMMENT ‘고객아이디’,

`product_id` bigint(20) NOT NULL COMMENT ‘상품아이디’,

`option_code` varchar(50) NOT NULL COMMENT ‘상품옵션코드’,

`quantity` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘상품 개수’,

PRIMARY KEY (`users_id`,`product_id`,`option_code `),

UNIQUE KEY `id_UNIQUE` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’카트에 담긴 상품’;

2. 로컬에 테이블을 생성 합니다.

CREATE TABLE `cityholic_db`.`cart_product` (

`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘아이디’,

`users_id` bigint(20) unsigned NOT NULL COMMENT ‘고객아이디’,

`product_id` bigint(20) NOT NULL COMMENT ‘상품아이디’,

`option_code` varchar(50) NOT NULL COMMENT ‘상품옵션코드’,

`quantity` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘상품 개수’,

PRIMARY KEY (`users_id`,`product_id`,`option_code `),

UNIQUE KEY `id_UNIQUE` (`id`)

) ENGINE=FEDERATED DEFAULT CHARSET=utf8 COMMENT=’카트에 담긴 상품’

CONNECTION=’mysql://root:dldusrn1@10.3.0.27:3306/cityholic_db/cart_product’;

– 원격지 테이블 Create 문에서 ENGINE  수정, CONNECTION 옵션 추가  작업만 수행 합니다.

– CONNECTION 옵션의 구성은 다음과 같습니다.  ‘mysql://[계정]:[비밀번호]@[서버ip]:[port]/[원격지DB명]/[원격지 테이블명]’

3. 이상 모든 설정을 완료 했다면 로컬에서 원격지의 Table을 로컬 테이블 처럼 사용 가능합니다. select, insert, update, delete 모두 가능 합니다.

 

Oracle의 DB Link 생성 및 사용법

1. 권한
DB Link를 생성 권한이 있어야 함.

– 공용 데이터베이스 링크생성 권한부여

GRANT CREATE PUBLIC DATABASE LINK TO [사용자 계정] ;

– 공용 데이터베이스 링크삭제 권한부여

GRANT DROP PUBLIC DATABASE LINK TO [사용자 계정] ;

– 데이터베이스 링크생성 권한부여

GRANT CREATE DATABASE LINK TO [사용자 계정] ;

※ 공용이 아닌 단순 데이터베이스 링크의 경우 삭제권한이 별도로 없다

(생성권한 만으로도 삭제 가능)

 

2.생성및 삭제
 – 생성 1

CREATE [SHARED][PUBLIC] DATABASE LINK LINK_NAME
[CONNECT TO CURRENT_USER]
[USING ‘connect_string’]

CREATE DATABASE LINK <LINK_NAME>
CONNECT TO <연결하고자 하는 user> IDENTIFIED BY <연결하고자 하는 user password>
USING <TNS정의명>

 – 생성 2
– TNS에 정의하지 않고 생성
– ORA-12154: TNS:could not resolve the connect identifier specified. 해당 오류 발생시 사용

CREATE PUBLIC DATABASE LINK LINK_NAME
CONNECT TO <연결하고자 하는 user>
IDENTIFIED BY <연결하고자 하는 user password>
USING ‘(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST=127.0.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ORCL)
)
)’

;

3. 사용방법
SELECT COUNT(*) FROM TABLE_NAME@DATA_LINK

# 생성시 권한 오류

SYSDBA 계정으로 권한 추가 : PUBLIC 명시 여부 체크
— PUBLIC DB LINK 생성  권한
SYS@ORACLE11> GRANT CREATE PUBLIC DATABASE LINK TO SCOTT;

— 생성권한 제거
SYS@ORACLE11> REVOKE CREATE PUBLIC DATABASE LINK FROM SCOTT;

— PUBLIC 링크 제거 권한
SYS@ORACLE11> GRANT DROP PUBLIC DATABASE LINK TO SCOTT;

— PUBLIC 링크 제거
DROP PUBLIC DATABASE LINK “링크명” ;


# DB 링크 사용시 에러
ORA-01017 invalid username
ORA-02063 line가 선행됨

# 해결방법 참고사이트 :http://www.happytomorrow.net/103
1) 11g에서 대소문자를 구분하지 않도록 설정.
– 다음의 명령어로 대소문자를 구분하지 않도록 설정할 수 있다.(11g서버에서 설정해줘야 함)

ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;

하지만… 저 값이 true로 되어있는 것은 다 이유가 있고… true가 default값인데… 난 default값을 바꾸는게 너무 찜찜하다…
그래서 다음 방법이 있다.

2) DB링크 생성시 접속 사용자 패스워드 부분에 “pass” 요런식으로 쌍따옴표를 붙인다.
create database link dblink
connect to SUNSHINY identified by “pass”
using ‘<TNS정의명>’;

 

# 아래 내용 출처 : 오라클 클럽

☞ 데이터베이스 링크(Database Link)데이터베이스 링크는 클라이언트 또는 현재의 데이터베이스에서 네트워크상의 다른 데이터베이스에
접속하기 위한 접속 설정을 정의하는 오라클 객체 입니다.

◈ 우선 고려되어야 사항은 ORACLE INSTANCE가 두개이상이고 각각의 HOST NAME과 ORACLE_SID는
다르고  NLS_CHARACTER_SET은 동일하게 되어 있어야 합니다.

– 만약 같은 MECHINE에서  INSTANCE의 ORACLE_SID가 같다면 TNS ERROR가 발생 합니다.
– 또한 미래를 위해 다른 MECHINE이라 할지라도 ORACLE_SID는 규칙에 의해 다르게 가져가는
것이 좋습니다.
– 그리고 NLS_CHARACTER_SET이 동일하게 되어 있지 않으면 DATA 입출력시 ?????로 나타납니다.
– 데이터베이스 링크로 연결되는 서버에 리스너가 꼭 띄어져 있어야 됩니다

[Syntax]

– PUBLIC : 오라클 시노님과 마찬가지로 PUBLIC 옵션을 사용하면 공용 데이터베이스 링크를 생성
할 수 있습니다.  PUBLIC 옵션을 사용하지 않으면 링크를 생성한 자신만 사용 할 수 있습니다.

– link_name : 데이터베이스 링크의 이름을 지정 합니다.

– service_name : 네트워크 접속에 사용할 오라클 데이터베이스 네트워크 서비스명을 지정 합니다.

– username, password : 오라클 사용자명과 비밀번호를 지정 합니다.

☞ 데이터베이스 링크의 사용

— 데이터베이스 링크 생성 예제

SQL>CREATE DATABASE LINK test_server
CONNECT TO scott IDENTIFIED BY tiger USING ’testdb’;

이 데이터베이스 링크 생성 문장에서 USING다음에 오는 testdb는 tnsnames.ora파일에 정의되어
있어야 합니다.

# 아래의 tnsnames.ora 파일은 오라클이 설치된 서버의 파일을 말합니다.
====== tnsnames.ora =====
testdb =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 211.109.12.123)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = oracle)
)
)
=========================

— 데이터베이스 링크를 통한 데이터의 조회..
SQL>SELECT ename FROM emp@test_server;

–시노님을 생성해서 사용하면 더욱더 편리하게 사용 할 수 있습니다.
SQL> CREATE SYNONYM emplink FOR emp@test_server;

— 시노님을 통한 조회
SQL>SELECT ename FROM emplink;

데이터베이스 링크의 삭제..
SQL>DROP DATABASE LINK test_server;

 

 

IIS + PHP 상세 에러 보기 설정

PHP 개발에서 에러가 날때, 해당 내용을 봐야 하는데,

기본적으로 IIS에서 PHP에러를 차단하고 에러번호(500번등)로만 나타난다.

운영서버에서 에러를 보지 못하게 하는 것은 좋은 설정이지만, 개발 당시에 에러를 보지 못한다는 것은 너무도 참혹한 설정이다.

해당 부분의 설정은 다음과 같이 설정하면 된다.

먼저, php.ini의 설정 위치를 찾기 위해서 <? phpinif(); ?>를 만들어서, 설정 파일 위치 정보를 찾는다.

1) PHP의 php.ini위치 값 확인

phpinfo 정보

2) C:\Program Files\PHP\v7.2\php.ini의 display_errors = On로 변경로 변경후 주석제거

3) Configurat Editor를 선택

IIS의 configurationEditor

4) 세션 항목 중에 httpErrors항목을 선택합니다.

httpError세션 선택

5) httpErrors세션의 errorMode를 Detailed로 변경

errorMode 변경

다음과 같이 설정하면, PHP의 에러 메시지를 확인 할 수 있습니다.

Oracle TableSpace 관리 생성 및 삭제

  – 테이블스페이스는 하나 또는 여러개의 데이터 파일로 구성되어 있는 논리적인 데이터 저장 구조 입니다.

– 테이블스페이스는 크게 시스템(SYSTEM) 테이블 스페이스와 비시스템(NON-SYSTEM)  테이블 스페이스로 구분 됩니다.

– 테이블스페이스는 사용자에게 공간을 할당할 수 있으며, 테이블스페이스 안에 저장되어   있을 데이터의 가용성을 제어할 수 있습니다.

※ 참고 1

 임시 테이블스페이스를 지정해 주지 않으면 시스템 테이블스페이스가 기본으로 지정 되지만 시 스템 테이블스페이스에 단편화가 발생할 수 있으므로 사용자를 생성할때 임시테이블스페이스를 따로 지정해 주는 것이 좋습니다.

– 또한 DEFAULT TABLESPACE도 사용자를 생성할때 지정해 주지 않으면 기본적으로 시스템 테이블스페이스가 지정이 됩니다. 하지만 사용자를 생성할때 DEFAULT TABLESPACE를 지정을 해서 사용자가 소유한 데이터와 객체들의 저장 공간을 별도로 관리를 해야 합니다.

시스템 테이블스페이스는 본래의 목적(모든 데이터 사전 정보와, 저장 프로시저, 패키지, 데이터베이스 트리거등을 저장)을 위해서만 사용되어져야 하지 일반사용자의 데이터 저장용으로 사용 되어서는 안됩니다.

 

1. 시스템 테이블 스페이스

– 오라클 데이터 베이스를 생성할 때 자동으로 생기며 오라클 데이터 베이스의 기동을 위해
꼭 필요한 테이블 스페이스 입니다.

– 모든 데이터 사전(Data Dictionary) 정보와, 저장 프로시저, 패키지, 데이터베이스
트리거등을 저장 합니다

– 유저데이타가 포함될 수 있지만 관리 효율성 면에서 포함 시키지 않습니다

2. 비 시스템 테이블 스페이스

– 롤백세그먼트, 임시세그먼트, 응용프로그렘 데이타, 그리고 응용프로그렘 인덱스를 저장 할 수 있습니다

– 공간관리를 쉽게 하기 위해서 생성 합니다.

– 유저에게 할당되는 공간 입니다.

 


▣ 테이블스페이스의 생성


   – 옵션절을 생략할 경우 밑줄친 옵션이 디폴트 값입니다.
– tablespace_name : 생성할 테이블 스페이스 명
– DATAFILE : 새로 생성하는 테이블스페이스가 사용할 데이터 파일
– filespec : 디렉토리 경로명을 포함한 파일명
– size : 새로 생성되는 데이터 파일의 크기

– ONLINE/OFFLINE
ONLINE : 새로 생성되는 테이블 스페이스를 활성화 시키며, 생성 후 바로 사용할 수 있게 함
OFFLINE : 테이블 스페이스를 비활성화 시키며, 생성 후 바로 사용할 수 없음

– PERMANT/TEMPORARY : TEMPORARY 옵션을 사용하면 생성하는 테이블스페이스는
임시 테이블스페이스가 됩니다.

– DEFAULT STORAGE

* INITIAL : 테이블 스페이스의 맨 첫번째 Extents의 크기
* NEXT : 다음 Extents의 크기
* MINEXTENTS : 생성할 Extents의 최소 값
* MAXEXTENTS : 생성할 Extents의 최대 값
* PCTINCREASE : Extents의 증가율, Default값은 50 입니다

테이블 스페이스 생성 예제

— sysdba권한으로 접속을 합니다.
SQL> conn sys/manager as sysdba

— 테이블스페이스 생성
SQL>CREATE TABLESPACE storm
DATAFILE ’C:\ORACLE\ORADATA\app_data.dbf’ SIZE 100M
DEFAULT STORAGE
(INITIAL    10K
NEXT      10K
MINEXTENTS 2
MAXEXTENTS 50
PCTINCREASE 50)

아래 그림 설명은 잘 못되었습니다.
두번째 extent는 next의 원래 크기와 동일합니다.
다음부터의 NEXT는 (1+pctincrease/100)에 next의 이전크기를 곱한 크기로 설정 됩니다.
그러므로 16K는 세번째 extent의 크기가 됩니다.

10k, 10k, 16k, 24K, 36k.. 이렇게 되겠죠..

 


▣ 비 활성화(OFFLINE) 테이블 스페이스

– 오프라인 상태 테이블스페이스의 데이타에는 접근 할 수가 없습니다.
– SYSTEM 테이블스페이스와 활성화된 롤백세그먼트를 가진 모든 테이블스페이스는
오프라인 상태가 될 수 없습니다.

– 테이블스페이스를 오프라인으로 만들기

데이타베이스가 오픈되어 있다면 데이타베이스 관리자는 SYSTEM 테이블스페이스나
활성 롤백세그먼트나  임시세그먼트를 가진 테이블스페이스를 제외한
어떤 테이블 스페이스든지 오프라인 상태로 만들 수  있습니다.

테이블스페이스가 오프라인상태가 됐을때 오라클 서버는 모든 관련된 모든 데이터
파일을 오프라인 상태로 만듭니다.


테이블스페이스는 세가지 모드로 오프라인 상태가 될 수 있습니다.
* normal : 디폴드 값, 테이블스페이스의 모든 데이터 파일에 대해 체크 포인트를 수행
합니다.
* immediate : CheckPoint를 수행하지 않습니다.
temporary : 테이블스페이스의 ONLINE데이터 파일에 대해 체크 포인트를 수행 합니다.

예제)
SQL> ALTER TABLESPACE app_data OFFLINE;


▣ 데이터 파일의 이동(ALTER DATABASE)

1) 데이터베이스를 종료 합니다.
2) 운영체제 명령을 사용하여 데이터 파일을 이동 합니다.
3) 데이터베이스를 마운트 합니다.
4) ALTER DATABASCE RENAME FILE명령을 수행하여 이름을 변경합니다.
5) 인스턴스를 시작합니다.

1) 인스턴스의 종료

C:>SQLPLUS /nolog
SQL>conn sys/manager  as sysdba
SQL>shutdown immediate;

2) 운영체제 명령을 사용하여 데이터 파일을 이동

– 운영체제 명령을 이용해서 데이터 파일을 이동 시킵니다.
– UNIX에서는 mv명령을 이용해서 새로운 위치로 이동 시킵니다.

3) 데이터베이스 마운트

SQL>startup mount;

4) ALTER DATABASE명령의 수행

SQL>ALTER DATABASE RENAME FILE
’C:\oracle\oradata\storm.dbf’ to
’D:\oracle\oradata\oracle\storm.dbf’ ;

alter database명령을 실행하면 오라클은 파일이 존재하는가를 검사합니다.
만약 이단계에서 에러가 발생하면 파일이름이 정확한지 다시 확인 하시면 됩니다.

5) 인스턴스 시작

SQL>alter database open


▣ 읽기전용(Read Only) 테이블 스페이스

– 테이블스페이스는 온라인 상태 이어야 합니다.

– 활성화된 트랜잭션은 허용되지 않습니다.(DML 작업)

– 테이블 스페이스에 활성화된 롤백 세그먼트가 포함되어 있지 않아야 합니다.

– 테이블 스페이스는 현재 온라인 백업에 포함되어 있지 않아야 합니다.


SQL>ALTER TABLESPACE app_data  READ ONLY;

==>app_data 테이블 스페이스를 읽기 전용으로 변경 시킵니다.


▣ 테이블 스페이스의 삭제

◈ 데이타를 가지고 있는 테이블스페이스는 INCLUDING CONTENTS옵션 없이는 삭제할 수
없습니다.

◈ 컨트롤 파일 내에 있는 파일 포인터만 삭제됩니다. (데이터 파일은 존재)

◈ 데이타베이스 파일은 여전히 존재하므로 운영체제 레벨에서 명시적으로 삭제 되여야만 합니다.

◈ 데이터 딕셔너리의 내용이 변경 됩니다.

◈ TableSpace를 삭제 하기 전에 테이블스페이스를 오프라인 상태로 할 것을 권장 합니다.

◈ TableSpace가 일단 삭제되면 그 데이타는 데이타베이스에 더 이상 존재하지 않게 됩니다.


 INCLUDING CONTENTS: TableSpace에 Data가 이미들어있을 경우 들어있는 내용을
포함해서 모두 삭제 합니다.

– CASECADE CONSTRAINTS : Primary Key가 설정되어 있는 경우에 child 의 Foriegn Key를                                           삭제하고 Tablespace를 삭제 합니다.

SQL> DROP TABLESPACE app_data  INCLUDING CONTENTS ;

==>app_data테이블 스페이스를 삭제 합니다.

# 데이타 파일까지 삭제
SQL> drop tablespace 테이블스페이스명
including contents
and datafiles
cascade constraints;

DROP TABLESPACE만 하면 그 안에 만약 테이블들이 들어있다면 안지워짐.
INCLUDING CONTENTS : 안에 테이블이 있건 없건 관계없이 무조건 삭제.
AND DATAFILES : 데이터파일도 같이 삭제.
CASCADE CONSTRAINTS : 물려있던 제약조건까지 삭제됨.

DBA_TABBLESPACES 데이터 사전

SQL>conn sys/manager as sysdba
SQL>SELECT tablespace_name, initial_extent, max_extents,  min_extlen
FROM dba_tablespaces;

DBA_DATA_FILES 데이터 사전

SQL>conn sys/manager as sysdba
SQL> SELECT file_name, tablespace_name
FROM dba_data_files;

콘트롤파일의 데이타파일 정보와 테이블스페이스 정보

SQL>conn sys/manager as sysdba
SQL> SELECT status,enabled, t.name,d.name
FROM  v$datafile d, v$tablespace t
WHERE t.ts#=d.ts#;

STATUS    ENABLED       NAME            NAME
——-   ———-      ————   ————————————-
SYSTEM  READ WRITE SYSTEM       C:\ORACLE\ORADATA\ORACLE\SYSTEM01.DBF
ONLINE    READ WRITE RBS             C:\ORACLE\ORADATA\ORACLE\RBS01.DBF
ONLINE    READ WRITE USERS         C:\ORACLE\ORADATA\ORACLE\USERS01.DBF
ONLINE    READ WRITE TEMP           C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF
ONLINE    READ WRITE TOOLS         C:\ORACLE\ORADATA\ORACLE\TOOLS01.DBF
ONLINE    READ WRITE INDX            C:\ORACLE\ORADATA\ORACLE\INDX01.DBF
ONLINE    READ WRITE DRSYS         C:\ORACLE\ORADATA\ORACLE\DR01.DBF
ONLINE    READ WRITE STORM        C:\ORACLE\ORADATA\ORACLE\STORM.DBF


테이블 스페이스의데이터 파일과 테이블 스페이스의 크기 확인

DBA_DATA_FILES 데이터 사전을 이용 하면 됩니다.

SQL> COL FILE_NAME FORMAT A40
SQL> COL TABLESPACE_NAME FORMAT A15

SQL>  SELECT file_name, tablespace_name, bytes, status FROM  DBA_DATA_FILES;

FILE_NAME                                                    T ABLESPACE_NAME      BYTES     STATUS
————————————-              —————    ————    ————
C:\ORACLE\ORADATA\ORACLE\SYSTEM01.DBF   SYSTEM           248250368   AVAILABLE
C:\ORACLE\ORADATA\ORACLE\RBS01.DBF          RBS                545259520    AVAILABLE
C:\ORACLE\ORADATA\ORACLE\USERS01.DBF      USERS            113246208    AVAILABLE
C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF       TEMP               75497472     AVAILABLE
C:\ORACLE\ORADATA\ORACLE\TOOLS01.DBF     TOOLS             12582912     AVAILABLE
C:\ORACLE\ORADATA\ORACLE\INDX01.DBF         INDX                60817408     AVAILABLE
C:\ORACLE\ORADATA\ORACLE\DR01.DBF            DRSYS            92274688      AVAILABLE

 FILE_NAME : DATAFILE의 물리적인 위치와 파일명을 알 수 있습니다.
 TABLESPACE_NAME : 테이블 스페이스의 이름을 알 수 있습니다.
 BYTES : 테이블 스페이스의 크기를 알수 있습니다.
 STATUS : 테이블 스페이스의 이용 가능 여부를 알 수 있습니다.

테이블 스페이스별 사용 가능한 공간의 확인

DBA_FREE_SPACE 데이터 사전

SQL> SELECT tablespace_name, SUM(bytes), MAX(bytes)
FROM DBA_FREE_SPACE
GROUP BY tablespace_name

TABLESPACE_NAME SUM(BYTES) MAX(BYTES)
—————           ———-     ———-
DRSYS                     88268800           88268800
INDX                        60809216           60809216
RBS                       524279808          498589696
SYSTEM                      65536                 65536
TEMP                      75489280           74244096
TOOLS                     12574720           12574720
USERS                   113238016          113238016

◎ SUM을 사용한 이유는하나의 테이블 스페이스에 분산되어 있는 여유공간을 합한 것이며,
◎ MAX를 사용한 이유는 여유 공간중 가장 큰 공간의 SIZE를 의미 합니다.


 데이타 화일에 대한 총 크기와 남아있는 공간, 사용한 용량, 남은 %율

DBA_FREE_SPACE, DBA_DATA_FILES 데이터 사전

SQL> COL FILE_NAME FORMAT A40
SQL> COL TABLESPACE_NAME FORMAT A30
SQL> SET LINESIZE 150
SQL> SELECT  b.file_name “FILE_NAME”,                                         —  DataFile Name
b.tablespace_name “TABLESPACE_NAME”,                      — TableSpace Name
b.bytes / 1024 “TOTAL SIZE(KB)”,                                    — 총 Bytes
((b.bytes – sum(nvl(a.bytes,0)))) / 1024 “USED(KB)”,         — 사용한 용량
(sum(nvl(a.bytes,0))) / 1024 “FREE SIZE(KB)”,                  — 남은 용량
(sum(nvl(a.bytes,0)) / (b.bytes)) * 100 “FREE %”               — 남은 %
FROM   DBA_FREE_SPACE a, DBA_DATA_FILES b
WHERE a.file_id(+) = b.file_id
GROUP BY b.tablespace_name, b.file_name, b.bytes
ORDER BY b.tablespace_name

FILE_NAME                                                  TABLESPACE_NAME  TOTAL SIZE(KB)   USED(KB) FREE SIZE(KB)     FREE %
————————————-                —————     ————–   ————-    ————- ———-
C:\ORACLE\ORADATA\ORACLE\DR01.DBF            DRSYS                    90112            3912         86200            95.6587358
C:\ORACLE\ORADATA\ORACLE\INDX01.DBF         INDX                        59392                8         59384            99.9865302
C:\ORACLE\ORADATA\ORACLE\RBS01.DBF          RBS                       532480          20488        511992            96.1523438
C:\ORACLE\ORADATA\ORACLE\TEMP01.DBF       TEMP                       73728               8         73720             99.9891493
C:\ORACLE\ORADATA\ORACLE\TOOLS01.DBF     TOOLS                      12288               8         12280            99.9348958
C:\ORACLE\ORADATA\ORACLE\USERS01.DBF      USERS                    110592               8        110584           99.9927662
# 사용자 정보 포함 출력

SELECT FILE_NAME,
TABLESPACE_NAME||'(‘||b.USERNAME||’)’ AS TABLESPACE_NAME,
TOTAL_SIZE AS “TOTAL_SIZE(KB)”,
USED AS “USED(KB)”,
FREE_SIZE AS “FREE_SIZE(KB)”,
FREE_P AS “FREE %”,
STATUS
FROM
(
SELECT  b.file_name “FILE_NAME”,                                         —  DataFile Name
b.tablespace_name “TABLESPACE_NAME”,               — TableSpace Name
b.bytes / 1024 “TOTAL_SIZE”,                                  — 총 Bytes
((b.bytes – sum(nvl(a.bytes,0)))) / 1024 “USED”,         — 사용한 용량
(sum(nvl(a.bytes,0))) / 1024 “FREE_SIZE”,                  — 남은 용량
(sum(nvl(a.bytes,0)) / (b.bytes)) * 100 “FREE_P”,           — 남은 %
b.STATUS                                                                 — 사용 여부
FROM   DBA_FREE_SPACE a, DBA_DATA_FILES b
WHERE a.file_id(+) = b.file_id
GROUP BY b.tablespace_name, b.file_name, b.bytes, b.status
ORDER BY b.tablespace_name
) a, DBA_USERS b
WHERE a.TABLESPACE_NAME = b.DEFAULT_TABLESPACE(+)
;

# TEMP 테이블 스페이스 용량 확인

COL NAME FORMAT A50
COL TOTAL FORMAT A15
COL USED FORMAT A15
COL FREE FORMAT A15
COL USAGE FORMAT A15
SET LINESIZE 130

SELECT B.NAME
, B.BYTES/1024/1024 || ‘ M’ TOTAL
, A.BYTES_USED/1024/1024 || ‘ M’ USED
, (B.BYTES-A.BYTES_USED)/1024/1024 || ‘ M’ “FREE”
, ROUND(A.BYTES_USED/B.BYTES * 100) || ‘% ‘ “USAGE”
FROM (SELECT BYTES_USED, FILE_ID FROM V$TEMP_EXTENT_POOL) A
, (SELECT BYTES, FILE#, NAME FROM V$TEMPFILE) B
WHERE A.FILE_ID = B.FILE#
;

▣ 수동으로 데이터 파일 크기 변경

– ALTER DATABASE명령으로 데이터 파일의 크기를 변경 할 수 있습니다.

예제)
SQL>ALTER DATABASE DATAFILE
’C:\ORACLE\ORADATA\app_data02.dbf’ RESIZE 300M

RESIZE명령으로 데이터 파일의 크기를 300M로 했습니다.
기존 데이터 파일의 크기가 300M가 넘을 경우에는 300M로 줄어들게되고,
300M가 되지 않았을 경우에는 300M로 늘어나게 됩니다.

– 무제한으로 변경
ALTER DATABASE DATAFILE
‘/app/oracle/oradata/TEST.dbf’
AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED
;

— TABLESPACE 생성

CREATE TABLESPACE SCOTT_DATA
DATAFILE ‘/usr/local/ora9i/oradata/oracle/SCOTT_DATA.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M
— AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED — 크기 제한 없음
DEFAULT STORAGE
(INITIAL     4K
NEXT        128K
MINEXTENTS  1
PCTINCREASE 0);

# INDEX 테이블 스페이스의 사용은 인덱스를 사용시에 옵션으로 지정.

CREATE TABLESPACE SCOTT_INDEX
DATAFILE ‘/usr/local/ora9i/oradata/oracle/SCOTT_INDEX.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M
DEFAULT STORAGE
(INITIAL     4K
NEXT        128K
MINEXTENTS  1
PCTINCREASE 0);

CREATE TEMPORARY TABLESPACE SCOTT_TEMP
TEMPFILE ‘/usr/local/ora9i/oradata/oracle/SCOTT_TEMP.dbf’ SIZE 100M
AUTOEXTEND ON NEXT 10M MAXSIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

— 사용자 계정 생성과 동시에 테이블 스페이스 지정.
CREATE USER 
scott   — 사용자 아이디
IDENTIFIED BY tiger    — 사용자 패스워드
DEFAULT TABLESPACE SCOTT_DATA   — 기본 사용 테이블 스페이스
TEMPORARY TABLESPACE SCOTT_TEMP — 템프(order by 등 정렬작업) 테이블 스페이스
QUOTA UNLIMITED ON SCOTT_DATA              — 할당량 지정(현재설정 무제한)
QUOTA 0M ON SYSTEM                                — system tablespace를 사용 못하게 설정
;

— 권한 설정
— 생성한 사용자에게 자신의 schema에서 테이블등을 만들 권한과 자원을 사용할 권한을 준다.
— GRANT RESOURCE, CONNECT TO MIDAN;
— DBA 권한을 준다.
GRANT DBA TO unicorn;

APM연동_PHP설치(Windows 10)

http://windows.php.net/download/

에 들어가 Thread safe방식 zip파일 가장 최근 버전을 다운로드 받습니다.

압축을 풀고 폴더이름을 PHP7으로 변경한 후에 PHP7폴더를 C드라이브에 옮겨줍니다.

PHP7의 폴더 속 php.ini-production파일을 php.ini로 변경합니다. (-production)을 지워줍니다.

php.ini을 메모장으로 열고 extension_dir을 아래와 같이 수정해줍니다.

extension_dir = “c:/PHP7/ext”

설정이 끝나면 C:\Apache24\conf로 들어가 httpd.conf파일을 메모장으로 열어줍니다.

아래 내용을 그림처럼 집어넣습니다.

LoadModule php7_module “c:/PHP7/php7apache2_4.dll”
AddType application/x-httpd-php .php .html
AddHandler application/x-httpd-php .php .html
PHPIniDir “c:/PHP7”

cmd를 열고, httpd.exe -k restart를 입력해준후 엔터를 누릅니다.

만약 Cannot load어쩌구 into server 오류가 뜬다면

http://www.microsoft.com/ko-KR/download/details.aspx?id=30679

에 들어가 파일을 다운받고 설치한 후에 다시 시도해봅니다.

그래도 안되면 PHP7 폴더속 php7apache2_4.dll과 php7ts.dll을 C:\Windows\System32 에 복사해 넣고 다시 시도해봅니다.

그래도안되면 php7ts.dll을 C:\Apache24\bin에 복사해 넣고 다시 시도해봅니다.

만약 그래도 안된다면 Apache를 64비트가 아닌 32비트로 다시 다운로드해서 설치해보시기 바랍니다.

저는 이것저것 시도하다가 마지막에 Apache를 32비트로 다시 설치하고 성공했습니다.

이래도안되는분들은 댓글로 문의 남겨주시기 바랍니다.

어쨋든 이리저리해서 성공적으로 설치가 되신분들은 C:\Apache24\htdocs로 들어가 phpinfo라는 이름의 메모장을 새로만들고 <?php phpinfo(); ?>를 적고 저장하신후에 확장자를 txt에서 php로 바꾸어줍니다.

그후에

http://127.0.0.1/phpinfo.php/

로 접속합니다.

만약 위와같은 화면이 뜬다면 php설치에 성공한겁니다.

다음시간에는 mysql의 설치와 한글화를 해보도록 하겠습니다.

윈도우에서 Apache와 PHP 연동

1. PHP 내려받기

링크: https://secure.php.net/downloads.php

2017/03/12 기준 5.6.30버전과 7.1.2버전이 있는데 7.x가 실행시간 더 빠르대요.

Current Stable PHP 7.x에 있는 Windows downloads를 클릭합니다!

이 중 Thread Safe라고 되어있는 것 중 시스템 종류(32/64bit)에 맞는 Zip 파일을 다운로드 합니다.

다운로드 받은 파일은 원하는 경로에 압축을 풀어 놓고 나중에 경로 적기 쉽게 PHP로 폴더이름을 바꿔줍시다. 저는 “E:/Program Files/”에 압축 풀었습니다.

2. php.ini 수정하기

php.ini을 수정하면 curl, mysql 등 다양한 확장기능을 사용할 수 있습니다.

PHP 폴더 안에서 “php.ini-development”를 찾아서 “php.ini”으로 이름을 바꾸고 메모장으로 실행합니다.

먼저 확장파일이 들어있는 ext 폴더 경로를 알려줘야 합니다.

;extension_dir = “./”를 검색해서 주석처리(;)를 지우고 ./로 된 부분을 (PHP 경로)\ext로 바꿔줍니다.

예) extension_dir = “E:\Program Files\PHP\ext”

그다음 다음 항목들을 검색해서 앞에 주석처리(;)된 부분만 지워줍니다.

;extension=msql.dll -> extension=msql.dll

;extension=php_curl.dll -> extension=php_curl.dll

;extension=php_mysqli.dll -> extension=php_mysqli.dll

;extension=php_pdo_mysql.dll -> extension=php_pdo_mysql.dll

만약 위에서 PHP 5.x로 받으신 분은 ;extension=php_mysql.dll도 찾아서 주석처리를 지워줍니다. php7에서는 php_mysql.dll의 기능을 php_mysqli.dll이 대체하기 때문에 없어졌다고 하네요.

Apache 내려받기 & 설정

1. Apache 내려받기

링크: https://www.apachelounge.com/download/

이것도 자신의 시스템 종류(32/64bit)에 맞춰 받아서 압축파일 안에 “Apache24” 폴더만 C:/에 압축을 풀어줍니다. 원하는 경로에 풀어도 되지만 httpd.conf 파일 수정할 때 Apache24 폴더 경로 기본값이 C:/라서 번거러운 작업 몇 가지 줄어듭니다. 저는 D:/에 압축을 풀었습니다.

2. httpd.conf 설정

이제 Apache 서버의 포트설정, php 연동을 위한 설정을 해야합니다.

Apache24/conf 폴더 안에 있는 httpd.conf 파일을 메모장으로 열어서 다음 순서대로 찾아가면서 경로를 설정합니다.

ServerRoot “c:/Apache24”

DocumentRoot “c:/Apache24/htdocs

<Directory “c:/Apache24/htdocs”>

<Directory “c:/Apache24/cgi-bin”>

ScriptAlias /cgi-bin/ “c:/Apache24/cgi-bin/”

각 항목을 메모장에서 찾아서 아래 예시와 같이 자신의 경로에 맞게 변경해줍니다. 항목 중 DocumentRoot를 위와 같이 기본값으로 주면 c:/Apache24/htdocs 안에 있는 파일을 보여줄 수 있게 됩니다. 예를 들어 c:/Apache24/htdocs 안에 hello.html이라는 파일이 있으면 나중에 주소창에 localhost/hello.html으로 연결하여 hello.html 파일을 브라우저로 열 수 있습니다. 기본값으로 두거나 원하는 폴더 경로로 변경합니다.

d:/Apache24인 경우 예시

ServerRoot “d:/Apache24”

DocumentRoot “d:/Apache24/htdocs

<Directory “d:/Apache24/htdocs”>

<Directory “d:/Apache24/cgi-bin”>

ScriptAlias /cgi-bin/ “d:/Apache24/cgi-bin/”

다음 항목들을 찾아서 변경하여 포트번호를 설정합니다. 포트번호는 기본값 80으로 되어있는데 임의의 포트로 수정하려면 아래와 같이 변경할 수 있습니다. 저는 8008로 설정해봤습니다.

Listen 8008

ServerName localhost:8008

마지막으로 PHP 연동을 위해 맨 아래에 다음을 추가해줍니다.

PHPIniDir “E:/Program Files/PHP/php.ini”

LoadModule php7_module “E:/Program Files/PHP/php7apache2_4.dll”

AddType application/x-httpd-php .php .inc .phtml

PHPIniDir 은 앞에서 수정했던 php.ini의 위치를 적습니다.

LoadModule 은 PHP폴더 내의 php7apache2_4.dll을 확인하시고 경로/파일명을 씁니다. php5로 받으신 분은 7 부분을 5로 고치고 php5apache2_4.dll을 확인하고 씁니다.

3. PHP와 연동하기

PHP 폴더의 libeay32.dll, libssh2.dll, ssleay32.dll을 복사해서 .\Apache24\bin\ 에 덮어씌워 줍니다. 아파치에서 curl_init() 같은 함수를 undefine으로 처리하는 문제를 해결해줍니다.

4. Apache 설치 및 실행

cmd를 관리자 권한으로 실행시켜 다음과 같이 적습니다.

(Apache24 경로)\bin\httpd.exe -k install

예) D:\Apache24\bin\httpd.exe -k install

성공 시 아래와 같이 나옵니다.

여기서 안되는 경우, vc15 패키지 를 다운로드&설치 후 다시 해보세요.

만약 아래와 같은 화면이 뜬다면 httpd.conf 파일에서 설정한 포트번호가 다른 서버로 사용 중인 경우입니다. 이 경우, httpd.conf에서 Listen과 ServerName의 포트번호만 변경하고 다음으로 넘어가시면 됩니다.

여기까지 성공하셨으면 이제 제어판-큰 아이콘-관리 도구-서비스 (또는 시작-서비스 검색)에서 Apache2.4를 오른쪽 클릭해서 시작을 클릭합니다. 그리고 브라우저를 실행하여 주소창에 다음과 같이 적습니다.

localhost:(위에서 설정한 포트번호)/index.html

It works!

※ 부록

localhost 를 주소창에 입력했을 때 뜨는 It works!를 없애고 싶을 때…

1. 서버 루트 폴더에서 index.html을 지운다

2. httpd.conf를 메모장으로 실행한다

3. IfModule dir_module 를 검색해서 바로 밑줄의

DirectoryIndex index.html 을 주석처리한다

프로젝트의 R&R을 기준으로 누가 어떠한 순서로 진행하는가

프로젝트 수행에 필요한 일반적인 포지션에 대해서 알아보자.

<업무프로세스와 포지션>

AE(Account Executive)

: 영업이다. 광고대행사에서 주로 사용하는 용어로 사용되기도 한다.

물건을 파는 영업이 아닌 무형의 서비스나 기술력을 판매하는 업무이기에 기술영업이라고도 말한다.

에이전시의 AE는 다양한 프로젝트의 수행경험도 보유하고 기반지식이 탄탄한 사람이 맡아서 하는 것이 가장 효과적이다. 개인적으로 기획자의 마지막 포지션이라고 생각한다.

PMO(Project Management Officer)

: 실구축을 하는 수행이 아닌 본 프로젝트를 포함한 전체 사업을 관리하는 포지션이다. 요구사항, 일정, 투입인력, 품질, 커뮤니케이션, 이슈를 포함하여 최종산출물 관리와 사업의 수익율까지를 관리하는 업무를 하게 된다.

PD(Project Director)

: 프로젝트 규모에 따라서 기획/디자인/퍼블리싱/프로그래밍의 수행PM의 상위에서 제안에서 구축으로 이관되는 시점에 초기요구사항 및 구축전략과 UIUX 설계가이드, 커뮤니케이션가이드 등 포괄적인 방향성을 수립해주는 업무를 진행하게 된다.

PM(Project Manager)

: 요구사항정의부터 기획/디자인/퍼블리싱/프로그래밍 단위 업무별 일정관리 및 업무이슈관리를 수행하는 것이 주요업무이다. 업무범위의 조율이나 투입인력을 상황에 맞게 탄력적으로 운용하기 위한 계획을 수립하고 파트별 진척사항을 파악하여 로드가 있는 이슈들의 해결을 위해 클라이언트/영업/파트별PL들과 협의하는 주체가 된다. 가장 중요한 산출물은 WBS(Work Breakdown Structure-작업명세서)를 관리한다. 추가적으로 투입된 모든 인력들의 Emotional Care를 담당하게 된다. 잦은 술자리와 커피 섭취로 인해 건강을 해치는 경우가 많아 정신적/육체적으로 건강이 최고의 무기이다.

PL(Project Leader)

: 기획/디자인/퍼블리싱/프로그래밍 각 리더로 파트별 일정, 품질, 업무범위에 대한 이슈관리를 맡아서 진행한다. 기획의 경우 PA들의 R&R정의를 시작으로 분석/설계단계의 산출물 작성 일정과 기능단위의 타 파트 및 현업 유관부서와의 협의를 주관하게 된다. 계획된 일정대로 착착 진행되면 좋겠지만 예의치 못한 다양한 이슈들이 발생하기 마련이고, 그때 마다 현업과 타 파트 PL들과 탄력적으로 일정 및 업무범위를 협의해 나가는 유연함이 요구되는 포지션이다. 소규모 프로젝트의 경우에는 PM/PL/PA의 업무를 동시에 맡는 경우도 있으나 대형 프로젝트의 경우에는 프로젝트 내내 회의만 다니다가 마무리 하는 경우도 있다.

화면UI설계 가이드 및 커뮤니케이션 가이드를 마련하여 각각의 PA들이 일관성 있는 UI설계를 할 수 있도록 포괄적인 가이드를 해 낼 수 있어야 하겠다. 기획PL! 개인적으로 프로젝트에서 가장 핵심적인 포지션이며 가장 매력적인 포지션이라고 생각한다.

PA(Project Assitant)

: PA는 프로젝트의 산출물 제작의 실무를 맡아서 진행하는 포지션이다. 기획자라면 화면UI설계를 하고 디자인이라면 화면UI 디자인 업무를 맡게 된다. PL은 PA들의 숙련도와 경험에 준하여 적절한 메뉴단위의 업무범위를 배정하고 해당 메뉴에 대해서는 PM/PL을 비롯하여 그 누구보다 이해도와 진행과정의 히스토리를 알고 있어야 한다. 초급기획자들이 보통 PA포지션에서 프로젝트마다 화면UI설계만을 진행하다가 PL이 될때 가장 힘들어 하는 부분이 전체를 보지 못하는 일이다. 일정상 업무환경상 맡은 메뉴의 화면UI설계하기도 바쁜게 사실이지만, 타 메뉴에 대한 관심도 필요하다. 그부분을 채워주고 하는 것이 PL의 롤이기도 하다.

기획자라면 PA를 시작으로 해서 AE가 되기까지의 모든 포지션을 경험하게 된다. 그리고 그 경험을 해야지만 경쟁력있는 AE가 될 수 있다고 본다. 각 에이전시마다의 경영방식이나 수행방법론에 따라서 조금씩의 차이는 보일 수 있겠으나, 일반적으로 위의 포지션에서 해당 업무를 수행하게 된다.

#nonem briefing


PM에 대한 생각이 많다. 나를 포함하여 주변에 다양한 캐릭터의 PM들이 존재를 하고 지금도 나와 함께 일을 하고 있다. PM은 클라이언트의 끝을 알수 없는 욕구와 수행팀원들의 슈퍼 멘탈의 중간에서 줄타기를 잘해야만 한다. 인생이 그러하듯 매 순간이 ‘설득을 하느냐 설득을 당하느냐’의 연속이다.

GIVE & TAKE, 클라이언트와 수행팀원들 사이에서 주고 받고의 딜을 잘하는 PM이 결국 나중에 클라이언트든 수행팀원이든 찾게 되는 PM이라고 생각한다. PM 본인이 일을 잘했는지 스스로의 평가는 프로젝트가 끝나고 다음 프로젝트가 준비될때면 알수 있다. 다시 프로젝트를 함께 하고 싶어하는 수행팀원이 없다면?

야구를 비유해서 보자면, PM은 감독이나 코치가 되어서는 안된다고 생각한다. PM은 그라운드 위에서 조력하는 포수가 되어야 하지 않을까?