Category Archives: Data

오라클 12c 설치 후 재시작할 때 오류

기본설치 했는데 왜 자동실행이 안되는걸까

오라클DB 12c는 미완성품인가

SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/12.1.0.2/db_1/dbs/initcdb1.ora'

init.ora 파일을 복사해서 설정파일을 만들어준다

$ cp /u01/app/oracle/product/12.1.0.2/db_1/dbs/init.ora /u01/app/oracle/product/12.1.0.2/db_1/dbs/initcdb1.ora

그리고 다시 실행

SQL> startup
ORA-48108: invalid value given for the diagnostic_dest init.ora parameter
ORA-48140: the specified ADR Base directory does not exist [/u01/app/oracle/product/12.1.0.2/db_1/dbs/<ORACLE_BASE>]
ORA-48187: specified directory does not exist
Linux-x86_64 Error: 2: No such file or directory
Additional information: 1
SQL>

주석을 원래 잘 안읽는데 갑자기 눈에 들어와서…

init.ora에 보면 다음내용이 보인다

Change ‘<ORACLE_BASE>’ to point to the oracle base (the one you specify at install time)

기본 경로대로 설치했다면

ORACLE_BASE = /u01/app/oracle

db_name='cdb1'
memory_target=1G
processes = 150
audit_file_dest='/u01/app/oracle/admin/orcl/adump'
audit_trail ='db'
db_block_size=8192
db_domain=''
db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
db_recovery_file_dest_size=2G
diagnostic_dest='/u01/app/oracle'
dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
open_cursors=300
remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='UNDOTBS1'
# You may want to ensure that control files are created on separate physical
# devices
control_files = (ora_control1, ora_control2)
compatible ='11.2.0'

12버전을 깔았는데 왜 11.2.0이 나와있는걸까… 의아하지만 오류가 나진 않을테니 넘어감

SQL> startup
ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
ORA-01262: Stat failed on a file destination directory
Linux-x86_64 Error: 2: No such file or directory

또 오류발생

$ mkdir /u01/app/oracle/fast_recovery_area

디렉토리를 수동으로 만들어줬다

그리고 실행

SQL> startup
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  2932632 bytes
Variable Size             671088744 bytes
Database Buffers          394264576 bytes
Redo Buffers                5455872 bytes
ORA-00205: error in identifying control file, check alert log for more info


실행은 되었으나..

오류가 나는거 보면 제대로 실행될리가 없다.

찾아보니

http://database.sarang.net/?inc=read&aid=23564&criteria=oracle&subcrit=&id=&limit=&keyword=&page=

컨트롤파일 오류라는 것 같다.

아까 설정 아래쪽에

control_files = (ora_control1, ora_control2)

이부분 수정이 필요해보인다.

 

control_files = (“/u01/app/oracle/oradata/orcl/control01.ctl”, “/u01/app/oracle/oradata/orcl/control02.ctl”)

여기는 찾아서 추가는했는데 이걸로 해도 되는지 확신이 없다

SQL> startup
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  2932632 bytes
Variable Size             671088744 bytes
Database Buffers          394264576 bytes
Redo Buffers                5455872 bytes
ORA-00201: control file version 12.1.0.2.0 incompatible with ORACLE version
11.2.0.0.0
ORA-00202: control file: '/u01/app/oracle/oradata/orcl/control01.ctl'


SQL>

11.2버전? 무슨소린지 모르겠다

자동설치로 그냥 클릭클릭만 했을 뿐인데…

initcdb1.ora > compatible = 12.1.0.2.0 으로 변경해봤더니

SQL> startup
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  2932632 bytes
Variable Size             671088744 bytes
Database Buffers          394264576 bytes
Redo Buffers                5455872 bytes
ORA-01103: database name 'ORCL' in control file is not 'CDB1'


SQL>

다음 오류

#db_name=’cdb1′
db_name=’orcl’

이거 다시 변경하고 서버 실행

SQL> startup
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  2932632 bytes
Variable Size             671088744 bytes
Database Buffers          394264576 bytes
Redo Buffers                5455872 bytes
ORA-65093: multitenant container database not set up properly


SQL>

에러확인

[oracle@localhost dbs]$ oerr ora 65093
65093, 00000, "multitenant container database not set up properly"
// *Cause:  An attempt was made to open a multitenant container database without
//          the correct parameter set for a multitenant container database in
//          the initialization parameter file.
// *Action: Set the 'enable_pluggable_database=true' parameter for the
//          multitenant container database in the initialization parameter file
//          and restart the database.
//
[oracle@localhost dbs]$

진짜 이것만 하면 되는건가

SQL> startup
ORACLE instance started.

Total System Global Area 1073741824 bytes
Fixed Size                  2932632 bytes
Variable Size             671088744 bytes
Database Buffers          394264576 bytes
Redo Buffers                5455872 bytes
Database mounted.
Database opened.
SQL>

되네

 

오라클은 엔지니어 쓰게 만들라고 어렵게 해놓나보다

오라클 안 쓰는 회사나 SE있는 회사로 이직 해야겠다

Oracle 토막상식 내 테이블 검색하기

쿠리는 어디선가 퍼옴

CLOB와 BLOB 데이터타입을 사용하는 키워드를 검색할 때 쓰는 쿼리

값을 좀 바꾸면 컬럼명이나 이런걸로도 찾아볼 수 있다.

SELECT OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE
FROM ALL_TAB_COLUMNS
WHERE DATA_TYPE IN (‘CLOB’, ‘BLOB’) and owner = ‘디비오너’;

SELECT DISTINCT table_name
FROM user_tab_cols
WHERE data_Type IN (‘CLOB’, ‘LOB’, ‘BLOB’);

Oracle 토막상식 DEFERRED

SEGMENT CREATION DEFERRED

http://lifeandoracle.blogspot.kr/2012/07/ora-00439-feature-not-enabled-deferred.html

The deferred segment creation option is not available in Oracle 11g Express Edition (XE), which is what you are using. It’s only available in Enterprise Edition (EE).

버전이 낮아서 안된다

데이터 마이그레이션 해달라고 해놓고 디비 버전을 낮은걸 줬네

아몰랑 마이그레이션

오라클 11g 삭제

개발하다보면 이것저것 깔고 지우고 많이 하게 되는데 오라클은 자동으로 삭제가 안된다

지우면서 삭제순서 기록

1. 삭제 프로그램 실행 (프로그램-Oracle)

deinstall 버튼이 있으니 잘 찾아보면 된다.

바로 삭제되는건 아니고 bat파일 위치를 알려준다.
(윈도우 버전에 따라 그냥 삭제가 되는건 아니겠지? 확실히 윈10에서는 안된다)

<oracle_home>/deinstall/deinstall.bat

대충 설치한 경우 이 위치에 잡힌다
/product/11.2.0/dbhome_1/deinstall/deinsta.bat

이걸 관리자 권한으로 실행

[ENTER][ENTER][ENTER][ENTER][ENTER][ENTER][ENTER]

 

그 후

2. 서비스는 알아서 정지를

cmd관리자 권한으로 실행 후 아래 명령어 실행

 

sc delete OracleVssWriterORCL
sc delete OracleDBConsoleorcl
sc delete OracleJobSchedulerORCL
sc delete OracleOraDb11g_home2TNSListener
sc delete OracleServiceORCL

글쓴이와 설치를 다르게 했다면 다를 수 있다.

 

3. 레지스트리 정리

regedit

Ora, ORACLE를 다 삭제하면 자바나 버추어박스 오류가 날 수 있으므로 찾아서 지워야한다

HKEY_CLASSES_ROOT\OracleConfig*
HKEY_CLASSES_ROOT\OracleDatabase*
HKEY_CLASSES_ROOT\OracleHome*
HKEY_CLASSES_ROOT\OracleDatabaseHome*
HKEY_CLASSES_ROOT\ORAMM*
HKEY_CLASSES_ROOT\Orcl*

VirtualBox붙은거 빼고 다 지우면 된다
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY*
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\ODP*
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\SYS*

HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Oracle11


 

4. 파일삭제

삭제삭제

[MQ,CEP] 0. 개요 및 구조 정의

MQ라는 것에 맨 처음 관심을 갖게된 계기는..

지금의 분류로는 빅데이터로 볼 수 있는 증권데이터였다

 

목표는 실시간 분석이었는데 그 때도 SQL로 처리하는 것은 포기했었다.

어차피 시간순서대로 사용되는 데이터니 파일로 저장하고 순차적으로 쓰려고 했었는데 실시간 분석이 안되는게 또 문제라서 중간 버퍼에 메서드를 필터로 깔아놓고 돌리는 방법을 썼었다.

당시 뭐 설계 구조도 좀 안좋았고 해서 속도도 안나오고 해서 포기했었는데(지금 보니 코드도 안좋다)

요즘 빅데이터나 실시간 분석 솔루션이 많이 나오면서 다시 관심을 갖게 됐다.

 

당시 원했던 구조는

  1. 세개가 연결된 구조 : 진입 ==> 필터(스크립트언어, java osgi) ==> 탈출
    ==>>==>>==>>==>>==>>==>>
    in[] ==> brane[] ==>out[]
  2. control api : 1번을 조작하는 api

추가로 생각한 부분은

in -> grabber, receiver

out -> shotter, deliverer

filter->aggregator, wiper

 


요즘 나와있는 툴

  1. fluentd는 보니 번은은 구현 돼 있다

http://www.fluentd.org/

 

2. kafka

http://kafka.apache.org/

 

3. logstash

https://www.elastic.co/products/logstash

 

4. flume

https://flume.apache.org/

 

5. rabbitmq

https://www.rabbitmq.com/

 

 

ORM(JPA,Hibernate)의 미세 권한 제어 2

미세권한 제어를 위해 필요했던 기능… 필요로 하던 .. interceptor가 지원이 된다

우선 hibernate 도큐먼트들 링크
https://docs.jboss.org/hibernate/orm/5.0/

인터셉터 관련 자원
https://docs.jboss.org/hibernate/orm/5.0/manual/en-US/html/ch14.html

JACC provider라는게 나오는데 이건 뭘까
보니
엔티티의 crud 권한을 제어하는 것 같다
각로우별 권한제어가 필요한 상황이니 이걸로는 조금 부족한 것 같다
별도처리해야할듯

LogBase 순차데이터 저장소

필요이유:
데이터의 형태에 따라 퇴적의 데이터 저장소가 있다. 요즘처럼 RDBMS의 용량을 초과할 정도의 대량의 데이터가 나오는 경우에는 이 필요성이 더 커진다.
순차데이터저장소는 증권,날씨,시스템 로그 등처럼 순차적으로만 조회되고
그냥 로그를 쌓는것과 형태는 같다. 단지 이것을 관리해주는 기능만 추가될 뿐이다.
나와있는 오픈소스들의 기능과 연동해서 사용한다면 만들어야 할 기능은 많지 않다. 아예 없을지도…?
마이크로소프트 아치브데이터와 같은 것을 사용하지 않는 것은 하둡 클러스터에 얹는것을 기본 목표로 하기 때문.
hbase가 충분한 성능만 보여준다면 여기에 그냥 입력하는 입력기 정도만 만드는 수준으로 끝내도 될지도 모르겠다.

적합한 데이터의 형태 :
각 데이터별로 확실한 스키마가 있고
대량의 데이터가 실시간으로 쏟아져나오며
조회시에도 중간중간의 몇몇 값을 조회하는게 아니라 전체적으로 순차적으로 분석을 해야하는
증권데이터가 가장 적합하다.

파일의 저장형태:
yyyymmdd(hh)정도까지면 충분하지않을까? 확장가능하도록 처리하는게 좋을듯하다. 스키마/시간 – 계층형 디렉토리 구분
스키마의 루트에 dtd파일로 스키마 정의, 시작시에 스키마를 메모리에 로딩
key-value, 구분자
배치처리를 이용한 중복데이터 제거.
MQ를 이용한 데이터 수신

Spring3.x with Mybatis 3.x insert시에 generated key 받아오기

스프링4.x 이 나왔지만 아직까지 제대로 검토를 못해봐서… 3.x까지만.. 확인.

롬복사용한 도메인포조DomainPOJO with lombok

@Data
public class EventLog {
	private Long eventLogId;
	private String eventResultStatusCode;
	private Timestamp createdAt;
	private String description;
	private Long eventInfoId;
	//OCCURRENCE, CONFIRM, RESOVED
	private String eventStatus;
}

매퍼인터페이스 Mapper interface

public interface LogMapper {
	int insertEventLog(EventLog eventLog);
}

매퍼xml Mapper xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="mapper.LogMapper">
	<cache />

    <!-- <insert id="insertEventLog" parameterType="EventLog" > -->
    <insert id="insertEventLog" parameterType="EventLog"  useGeneratedKeys="true" keyProperty="eventLogId">
		INSERT INTO event_log(
			event_result_status_code,
			description,
			event_info_id
		)VALUES(
			#{eventResultStatusCode},
			#{description},
			#{eventInfoId}
		)
	</insert>
</mapper>

테스트코드 Junit TestCode

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(
		locations = {
				"classpath*:spring-context.xml"
		}
)
public class LogInsertTest {

	@Autowired
	LogMapper logMapper;
	
	@Test
	public void test(){
		EventLog eventLog = new EventLog();
		eventLog.setEventResultStatusCode("200");
		eventLog.setDescription("desc");
		eventLog.setEventInfoId(54L);
		
		int result = logMapper.insertEventLog(eventLog);
		System.out.println(result);
		System.out.println(eventLog);
	}
}

리턴값은 적용된 쿼리의 로우수

call by reference로 값을 확인할 수 있다.

기존 코드에서 몇 라인정도만 수정해주면 된다.

 

 

 

 

Ubuntu12.04 postgresql with postgis

현재 우분투 버전 13.04 postgis설치시에 apt-get 기본패키지로 postgresql 9.1과 그에 딸린  postgis설치하면 제대로 동작을 하지않는다.

정확한 패키지명.. postgresql-9.1-postgis

 

2.x버전을 설치해야 제대로 동작한다고한다.

관련 페이지.

http://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS20Ubuntu1210src

http://docs.geonode.org/en/latest/tutorials/admin/install/install_postgis.html

http://postgis.net/docs/postgis_installation.html#make_install_postgis_extensions

삭제되는경우를 대비하여 복사.

How to install PostGIS 2.0 on Ubuntu 12.10 (quantal) from source
Prerequisites

Several components are needed, which can either be built from source or installed from pre-built packages, as shown below.

Install prerequisite packages using:

sudo apt-get install build-essential postgresql-9.1 postgresql-server-dev-9.1 libgeos-c1 libxml2-dev libproj-dev libjson0-dev xsltproc docbook-xsl docbook-mathml
Optional package for raster support (this is required if you want to build the PostgreSQL extensions):

sudo apt-get install libgdal1-dev
Build PostGIS

wget http://download.osgeo.org/postgis/source/postgis-2.0.4.tar.gz
tar xfz postgis-2.0.4.tar.gz
cd postgis-2.0.4
PostGIS 2.0 can be configured to disable topology or raster components, using the configure flags --without-raster and/or --without-topology. The default is to build both. Note that raster is required for the extension installation method for PostgreSQL.

./configure
make
sudo make install
sudo ldconfig
sudo make comments-install
Lastly, enable the command-line tools to work from your shell:

sudo ln -sf /usr/share/postgresql-common/pg_wrapper /usr/local/bin/shp2pgsql
sudo ln -sf /usr/share/postgresql-common/pg_wrapper /usr/local/bin/pgsql2shp
sudo ln -sf /usr/share/postgresql-common/pg_wrapper /usr/local/bin/raster2pgsql
Spatially enabling a database

With PostgreSQL 9.1, there are two methods to add PostGIS functionality to a database: using extensions, or using enabler scripts.

PostGIS Extension for PostgreSQL

Spatially enabling a database using extensions is a new feature of PostgreSQL 9.1.

Connect to your database using pgAdmin or psql, and run the following commands. To add postgis with raster support:

CREATE EXTENSION postgis;
To add topology support, a second extension can be created on the database:

CREATE EXTENSION postgis_topology;
Enabler Scripts / Template

Enabler scripts can be used to either build a template, or directly spatially enable a database. This method is older than the extension method, but is required if the raster support is not built.

The following example creates a template, which can be re-used for creating multiple spatially-enabled databases. Or if you just want to make one spatially enabled database, you can modify the commands for your needs.

PostGIS:

sudo -u postgres createdb template_postgis
sudo -u postgres psql -d template_postgis -c "UPDATE pg_database SET datistemplate=true WHERE datname='template_postgis'"
sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql
sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/spatial_ref_sys.sql
sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/postgis_comments.sql
with raster support:

sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/rtpostgis.sql
sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/raster_comments.sql
with topology support:

sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/topology.sql
sudo -u postgres psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/topology_comments.sql
See also

 https://help.ubuntu.com/community/PostgreSQL

CentOS6 Postgresql 9.3 replication[현재안됨]

서버두개 Master Slave인 경우

대략적인 설정을 하고 확인한 것은.  pg의 레플리케이션은 파일을 Master서버에서 파일을 퍼와서 Slave서버에 바로 배치입력시키는 과정을 자동화해놓은 정도의 수준인 것처럼 보인다.

Master

ip : 192.168.0.101
username : testuser
password : testpass1234
권한 : replication

아이디 비밀번호가 같을 필요는 없지만 편의상 같ㄱ ㅔ한다

Slave
ip : 192.168.0.102
username : testuser
password : testpass1234

 

Master서버 설정

데이터 경로

자동설치의 경우 /etc/init.d/postgresql-0.3 스크립트에서 수정해야된다

# Set defaults for configuration variables
PGENGINE=/usr/pgsql-9.3/bin
PGPORT=5432
#PGDATA=/var/lib/pgsql/9.3/data
PGDATA=/home/postgres/data
#PGLOG=/var/lib/pgsql/9.3/pgstartup.log
PGLOG=/home/postgres/data/pg_log/pgstartup.log
# Log file for pg_upgrade
#PGUPLOG=/var/lib/pgsql/data/$PGMAJORVERSION/pgupgrade.log
PGUPLOG=/home/postgres/data/$PGMAJORVERSION/pgupgrade.log

 

pg_hba.conf

local trust, 외부접속설정. replication설정을 주의

# "local" is for Unix domain socket connections only
###trust로하자 편하게
local   all             all                                     trust

# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
## 아무데서나 접속하게해준다는 뜻. 하나하나 설정해주는게 보안에 좋다. 내 경우는 방화벽도 있고 암호도 있으니까 그냥 ip는 풀어놨다
host    all             all             0.0.0.0/0               md5

# IPv6 local connections:
host    all             all             ::1/128                 ident

# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident
## 리플레케이션 유저를 설정. trust 또는 md5로 보통 쓴다
host    replication     testuser            192.168.0.102/0         trust

postgresql.conf

listen_addresses = '*'
port = 5432
wal_level = hot_standby
archive_mode = on
archive_command = 'cp %p /home/postgres/data/pg_archive/%f'
max_wal_senders = 3
wal_keep_segments = 8

pg인증방식

pg_hba.conf
host all all 127.0.0.1/32 trust
host all all 127.0.0.1/32 md5

local all postgres peer
local all postgres md5

Slave서버

# pg_basebackup -h 192.168.0.101 -p 5432 -U testuser -D /home/postgres/data --xlog --checkpoint=fast --progress
# chown postgres:postgres /home/postgres -R
# mkdir /home/postgres/data/pg_archive

pg_hba.conf

노예는 이것만 설정한다. 사용만 하면되니까… 마스터에서 접근은 안한다.

host    all             all             0.0.0.0/0               md5

postgresql.conf

listen_addresses = '*'
port = 5432
wal_level = hot_standby 
archive_mode = on
archive_command = 'cp %p /home/postgres/data/pg_archive/%f'
max_wal_senders = 2
wal_keep_segments = 8

recoverty.conf

다른쪽들은 복제할 때 다 됐을테니 따로 안해도 된다… 이것만 새로 생성

restore_command = 'cp /home/postgres/data/pg_archive/%f %p'
archive_cleanup_command = 'pg_archivecleanup /home/postgres/data/pg_archive %r'
recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.0.101 port=5432 user=testuser password=testpass1234'
#trigger_file = '/tmp/pgsql.trigger'

주의할점

로그확인을 잘 하자.

 

 

참고한 페이지

http://mixellaneous.tistory.com/1007
https://www.digitalocean.com/community/articles/how-to-set-up-master-slave-replication-on-postgresql-on-an-ubuntu-12-04-vps
http://wiki.postgresql.org/wiki/Binary_Replication_Tutorial
http://histlinux.egloos.com/1227710
http://mixellaneous.tistory.com/1007
http://dba.stackexchange.com/questions/16781/postgresql-9-1-hot-backup-error-the-database-system-is-starting-up