글쓴이 보관물: totoli78

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;

 

 

무료 SSL 보안 인증서 발급받기 (Free SSL Certificate)

Let’s Encrypt 에서 시작된 무료 SSL 인증서 발급 서비스는

비싼 년간 갱신 비용을 지불하면서 유료로 SSL 인증서를 발급받아 유지하지 않아도 되는 획기적인 방향을 제시했습니다.

물론 3개월마다 인증서를 갱신해야 하는 번거로움은 있습니다.

이런 불편함에도 불구하고 와일드카드 인증서와 멀티도메인 인증서까지 무료로 발급할 수 있는 매력은 소규모 사이트에 SSL 보안 인증서를 적용하는 부담을 상당히 줄여줍니다.

또, 3개월마다 갱신해야하는 인증서를 자동으로 갱신처리를 해주는 프로그램들도 있기 때문에 생각보다 갱신으로 인한 불편함은 적은 편입니다.

무료 SSL 인증서를 발급할 때 좋은 점은 웹서버에서 미리 인증서 요청을 생성하지 않아도 되는 것입니다.

무료 SSL 인증서를 발급해봅니다.

무료 SSL 인증서 발급은 2단계로 진행됩니다.

첫번째 단계는 인증서를 발급.

두번째 단계는 발급받은 인증서를 바로 웹서버에 적용 가능한 SSL 인증서 백업 파일로 변환.( *.pfx파일 ) 하는 것입니다.

발급받은 인증서를 인증서 백업파일로 변환하는 것은, 최초 인증서 요청을 생성하지 않았기 때문에 발급 받은 인증서 만으로로는 웹서버에 적용할 수 없기 때문에 인증서를 백업했다 복원하는 방식으로 인증서를 설치할 수 있도록 하기 위해서 입니다.


무료 SSL 인증서 발급_

인증서를 발급받기전 준비사항

무료 SSL 인증서를 발급받으려면 도메인 소유권 증명을 해야하기 때문에 다음 2가지중 한가지가 가능해야 합니다.

A. 도메인 인증 파일을 업로드하는 방식 – 무료 SSL 인증서를 발급받는 도메인이 설정된 웹호스팅, 또는 단독 서버가 있어야 합니다.

해당 웹사이트에 폴더 생성 및 파일 업로드가 가능해야 합니다. 또는 FTP서비스가 웹사이트로 설정된 서버(호스팅) 폴더와 연결되어 있어야 합니다.

“http://도메인” 으로 해당 사이트에 접근 가능해야 합니다.

실제 웹사이트는 구성되어있지 않아도 됩니다. 특정 폴더 위치에 소유자 인증 파일에 접근만 가능하면 됩니다.

B. DNS를 이용해 도메인 인증 키값을 TXT 필드에 적용.

DNS 호스팅을 하고 있는 경우(웹호스팅, 또는 외부 네임서버 서비스 이용) DNS 관리 기능으로 TXT 필드를 생성할 수 있어야 합니다.

자체 네임서버(DNS 서버)를 사용하는 경우 네임서버에 TXT 필드를 추가하면 됩니다.

본인 소유 도메인이 아니면 SSL 인증서는 발급받을 수 없습니다.

https://www.sslforfree.com/

사이트에 접속합니다.

영어 몰라도 발급받는데는 별 어려움은 없지만, 어설픈 한글사이트라도 원한다면 우측 상단에 구글 번역기가 붙어있으므로 구글 번역기를 이용해도 됩니다.

영문으로 설명합니다.

맨 위에는 도메인 입력난이 있습니다.

여기에 무료 SSL 인증서를 발급받을 도메인 명을 입력하게 됩니다.

보통은 서브도메인 없이 1차 도메인명(mydomain.com)만을 입력하면 됩니다.

설명에서는 2차 도메인을 위한 무료 SSL 인증서를 하나 발급받아봅니다.

그 아래에는 간단한 사용 설명과 지원사항 등일 자세하게 나와있습니다.

도메인을 발급받기 전에 알아두면 좋은 내용입니다.

Let’s Encrypt 무료 SSL 인증서는 상용 인증서 발급 서비스와 동일한 수준의 다양한 인증서 발급 기능을 제공합니다.

Let’s Encrypt 무료 SSL 인증서 발급 지원 사항

Let;s Encrypt 기반 무료 인증서 발급은 아래와 같은 다양한 인증서 형태의 SSL 인증서 발급을 지원합니다.

1. 와일드카드 SSL 인증서 지원

1차 도메인 앞에 서브도메인으로 “*” 를 붙여 와일드카드 SSL 인증서를 지원합니다.

*.mydomain.com

으로 인증서를 발급받으면 mydomain.com 하위 도메인 모두에 대해서 SSL 적용이 가능합니다.

2. www 도메인 인증서 자동 생성

1차 도메인명으로 SSL 보안 인증서를 생성하면 자동으로 www 하위 도메인에 대한 인증서까지 생성 해줍니다.

한번에 SSL 인증서가 2개가 발급됩니다.(1차 도메인용, www 서브 도메인용)

3. 서브도메인 별로 개별 SSL 인증서 생성

개별 서브 도메인 단위로 SSL 인증서를 1개씩 생성

4. 멀티도메인 인증서 생서 지원

도메인 입력난에 공백으로 띄워 2개 이상의 도메인을 입력하면 입력한 도메인들 모두에 대한 인증서를 일괄 생성해줍니다.

1차 도메인을 입력하면 자동으로 www가 붙은 하위도메인까지 입력해줍니다.

도메인 소유권 인증을 하는 3가지 방법(가능한 방법으로 택1)

무료 SSL 인증서를 발급할 도메인 명을 입력하고 “Create Free SSL Certificate” 버튼을 누릅니다.

소유권 인증 방법을 선택하는 화면이 나옵니다.

소유권 인증 방법은 총 3가지가 가능합니다.

1. “Automatic FTP Verification” – FTP 를 이용한 자동 처리 방식

2. “Manual Verification” – 소유권 인증 파일을 다운로드받아 직업 업로드

3. “Manual Verification” – DNS에 TXT 레코드로 소유권 인증 키를 추가

1과 2번은 웹호스팅 공간, 또는 서버에 특정 폴더가 만들어지고, 그 안에 소유권 인증 파일을 업로드하면 sslforfree.com 서버가 해당 “http://도메인/소유권인증파일” URL로 접근해 소유권이 있는지 확인합니다.

http로 웹사이트에 접근이 가능해야 합니다.

1번은 웹사이트와 경로를 공유하는 FTP 가 있어야만 사용 가능합니다.

FTP 정보 입력 양식에 FTP 접속 정보를 입력하면 sslforfree.com 서버에서 자동으로 해당 FTP로 로그인 해 폴더를 생성하고, 소유권 인증용 파일 업로드까지 해줍니다.

3번은 DNS에 TXT 레코드를 추가할 수 있어야 합니다.

네임서버 호스팅을 이용하는 경우에도 대부분 DNS 관리 기능은 제공하므로 이 기능을 이용하면 됩니다.

http로 접근가능한 웹사이트가 아직 준비되어 있지 않은 경우, 또는 인터넷으로 접근할 수 없는 인트라넷, 개발용 서버, 방화벽 뒤에 있어서 80포트 접근이 제한된 경우 DNS 인증 방식을 사용하면 됩니다.

1. DNS 인증 방법부터 해봅니다.

“api.apost.kr” 이라는 서브 도메인을 위한 인증을 한다고 할 경우

1. “Manual Verification (DNS)” 를 클릭.

2. DNS 인증하는 방법에 대한 안내가 나옵니다. “Manually Verify Domain” 버튼을 클릭.

3. “Manually Verify Domain” 버튼 밑으로 DNS  “TXT” 레코드로 등록할 내용이 표시됩니다.

4. 도메인 관리 기능, 또는 네임서버의 해당 도메인에 TXT 레코드를 표시되는 내용대로 추가합니다.

일부 네임서버 호스팅 관리 도구에서는 “_”(언더바)와 같은 특수 문자 입력이 제한된 경우가 있습니다.

이런 경우에는 이 방법을 사용할 수 없습니다.

5. “Verify _acme-challenge.내도메인” 링크를 클릭해 TXT 레코드가 적용되었는지 확인합니다.

TXT 레코드가 적용되지 않았을 경우 “No TXT Record Found. Make to set the TTL to 1 second or if you cannot set the TTL then you must wait the TTL (in seconds) so it updates before verifying the domain. Contact your DNS provider if unsure.” 메시지가 표시됩니다.

이 경우 TXT 레코드가 잘못 적용된 것이므로 문제점을 찾아 수정해야 합니다.

6. TXT 레코드가 적용되었으면 “Download SSL Certificate” 버튼을 누르면 인증서 압축파일이 다운로드 됩니다.

“I Have My Own CSR”은 체크하지 않습니다. 이 항목은 인증서 요청을 생성한 경우에만 사용합니다.

2. 웹사이트 특정 폴더에 소유권 인증용 파일을 직접 업로드합니다.

1, 소유권 인증 방식으로 “Manual Verification” 을 선택합니다.

2. “Manually Verify Domain” 버튼을 클릭

3. 수동 인증을 위한 안내가 표시됩니다.

4. “Download File #1″을 클릭해 소유권 인증 파일을 다운로드 합니다.

도메인 명으로 1차 도메인을 입력했으면 다운로드 링크가 2개가 표시되며, 두개 모두 다운로드 및 업로드를 해야 합니다.

5. 웹사이트 루트에

.well-known

ㄴ acme-challenge

구조대로 폴더를 생성합니다.

“well-known” 앞에 마침표가 있는점을 주의해야 합니다.

6. 다운로드한 파일을 “acme-challenge” 폴더 안에 저장(업로드)합니다.

7. 5번의 링크를 클릭해 업로드한 파일이 접근이 가능한지 확인합니다.

http 로 접근이 가능한 경우 인증 파일 안의 키 값이 표시됩니다.

1차 도메인을 신청하는 경우 확인 링크가 2개가 표시됩니다. 두개 모두 클릭해 인증 키가 보이는지 확인해야 합니다.

8. “Download SSL Certificate” 버튼을 눌러 인증서 파일을 생성 합니다.

9. 인증서 생성이 완료되고 인증서 발급 정보가 표시되면 “Download All SSL Certificate Files” 버튼을 클릭합니다.

인증서 압축파일이 다운로드 됩니다.

3. FTP 자동인증. 

웹사이트에 FTP가 연동되는 경우, 인증서 발급 전 소유권 인증 페이지에서 FTP 정보만 입력하면 자동으로 인증 처리가 완료됩니다.

접속 FTP 계정은 반드시 폴더 생성 및 읽기/쓰기 권한이 있어야 합니다.

1. “Automatic FTP Verification” 클릭

2. 밑에 표시되는 FTP 접속 정보 폼에 연결 정보 입력

3. “Download Free SSL Certificate” 클릭해 인증서를 생성합니다.

4. 인증서 생성이 완료되고 인증서 발급 정보가 표시되면 “Download All SSL Certificate Files” 버튼을 클릭합니다.

인증서 압축파일이 다운로드 됩니다.


SSL 인증서 백업 파일로 변환하기_

발급받은 인증서는 인증요청 없이 발급받은 인증서이기 때문에 웹서버에 설치하려면 인증서 백업 파일 형태로 변환해야 합니다.

https://www.sslshopper.com/ssl-converter.html

사이트에 접속합니다.

1. sslforfree.com 에서 다운로드 받은 무료 SSL 인증서 zip 파일의 압축을 풉니다.

인증서 파일은 “ca_buldle.crt”, “certificate.crt”, “private.ke” 3개로 구성됩니다.

2. 폼의 “Type To Convert To” 목록에서 “PFX/PKCS#12” 를 선택합니다.

업로드할 인증서 파일을 선택하는 항목이 1개에서 4개로 늘어납니다.

4개의 업로드 파일 선택 필드중 상단의 2개만 사용합니다.

3, 맨위 “Cerfificate Files to Convert” 필드의 “파일 선택” 을 클릭해 압축을 풀어놓은 인증서 파일들 중 “certificate.crt” 파일을 선택합니다.

두번째 “Private Key File” 필드의 “파일 선택” 을 클릭해 “private.key” 파일을 선택합니다.

4. “Type of Current Certificate” 는 “Standard PEM” 을 선택합니다.

5. “Convert Certificate” 버튼을 클릭합니다.

“certificate.pfx” 파일이 다운로드 됩니다.

오픈SSL 을 사용하는 경우 커멘드라인으로 직접 인증서 백업 파일로 변환이 가능합니다.

openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt

이제 다운로드 받은 SSL 인증서 백업파일( certificate.pfx )을 웹서버에서 등록하면 됩니다.

IIS 10 URL Rewrite를 사용 HTTP → HTTPS Redirect 설정

이 글은 Windows 10의 IIS에서 테스트 되었습니다. URL 재작성을 사용하기 위해서는 웹 플랫폼 인스톨러를 통해서 URL 재작성 기능을 설치해야 합니다.

웹 플랫폼 인스톨러가 설치되어 일지 않다면 Web Platform Installer 에서 다운로드하여 설치합니다.

웹 플랫폼 인스톨러에서 URL 재작성 기능을 검색하여 설치합니다.

IIS 관리자에서 웹사이트를 선택하고 가운데 화면에서 “URL 재작성”을 더블 클릭합니다.

오른쪽 화면에서 “규칙 추가…”를 클릭합니다.

인바운드 규칙의 “빈 규칙” 을 선택하고 “확인” 버튼을 누릅니다.(빈 규칙을 더블 클릭해도 됩니다.)

인바운드 규칙 편집 상단의 이름과 URL 검색에 다음과 같이 입력합니다.

* 이름 : Redirect to HTTPS

* URL 검색

– 요청한 URL(R) : 패턴과 일치

– 사용(S) : 정규식

– 패턴(T) : (.*)

– 대/소문자 무시(I) : 체크

조건 영역에서 “논리 그룹화(G)”는 “모두 일치” 를 선택하고 “추가…” 버튼을 누릅니다.

조건 추가 창에서 다음과 같이 입력합니다.

– 조건 입력(C): {HTTPS}

– 입력 문자열이 다음과 같은 경우 확인: 패턴과 일치

– 패턴(T): ^OFF$

– 대/소문자 무시 : 체크

작업 영역에서 다음과 같이 입력합니다.

– 작업 유형(Y): 리디렉션

– URL 리디릭션: https://{HTTP_HOST}/{R:1}

– 쿼리 문자열 추가(Q): 체크

– 리디렉션 유형: 기타 참조(303)

IIS관리자 오른쪽 화면에서 “적용”을 누르고 “규칙으로 돌아가기”를 누릅니다.

URL 재작성 룰이 추가된것을 확인할 수 있습니다.

이제 http:// 요청을 해보면 https:// 로 리다이렉트 되는 것을 확인할 수 있을 것입니다.

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;

HTTPS SSL 인증서 상호 변환하기 apache(.crt ) ↔ IIS(.pfx) ↔ Tomcat(jks)

1. PKCS(.pfx)

– 윈도우 IIS 에서 사용되는 키와 인증서가 포함된 파일

2. apache 용 인증서

– .crt : 텍스트 형식의 인증서 파일

– .key : 텍스트 형식의 키파일

3. pfx -> crt

root]~]# openssl pkcs12 -in filename.pfx -nocerts -out filename.key # 키파일 추출
root]~]# openssl pkcs12 -in filename.pfx -nokeys -clcerts -out filename.crt # 인증서파일 추출
root]~]# openssl pkcs12 -in filename.pfx -nodes -nokeys -cacerts -passin pass:비밀번호 -out chain.crt # 체인인증서 추출

4. crt -> pfx

root]~]# openssl pkcs12 -inkey aaa.key -in qtrustssl.crt -certfile ChainCA.crt -export -out qtrustssl.pfx -name “qtrustssl”

5. pfx -> jks

keytool -importkeystore -srckeystore qtrustssl.pfx -srcstoretype pkcs12 -destkeystore qtrustssl.jks -deststoretype jks -alias “qtrustssl”

6. jks 정보 확인방법

keytool -list -keystore cert.jks -rfc
keytool -list -keystore cert.jks -v

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 을 주석처리한다