생계/Oracle2022. 12. 22. 21:10
반응형

오라클 엔진을 설치하고 나서 dbca 로 간단하게 데이터베이스를 생성할수도 있지만
CREATE DATABASE 구문으로 DB 를 생성할수도 있다. 

1. CREATE DB

export ORACLE_SID=ORCL;
export DB_NAME=ORCL;

--shutdown immediate;
sqlplus / as sysdba
startup mount exclusive restrict
drop database;

-- pfile 은 사전에 준비되어있어야 한다.
startup nomount pfile='initORCL.ora'

CREATE DATABASE ORCL
user sys identified by oracle
user system identified by oracle
CONTROLFILE REUSE
LOGFILE
GROUP 1 ('+DATA') SIZE 10M REUSE,
GROUP 2 ('+DATA') SIZE 10M REUSE
DATAFILE '+DATA' SIZE 10G AUTOEXTEND ON MAXSIZE 30G
DEFAULT TABLESPACE USERS DATAFILE '+DATA' SIZE 10G AUTOEXTEND ON MAXSIZE 30G
DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '+DATA' SIZE 10G AUTOEXTEND ON MAXSIZE 30G
UNDO TABLESPACE UNDOTBS DATAFILE '+DATA' SIZE 10G AUTOEXTEND ON MAXSIZE 30G
CHARACTER SET AL32UTF8
;

alter database mount;
alter database open;

2. DICTIONARY, 후속작업 

수동으로 디비를 생성하고 open 했지만 깡통 디비이기에 할수 있는게 없다.
후속으로 아래 스크립트를 실행하자.

conn sys/oracle as sysdba
SQL>@?/rdbms/admin/catalog.sql
-- Creates the data dictionary and public synonyms for many of its views, and grants PUBLIC access to the synonyms; also calls the scripts CATAUDIT.SQL, CATESP.SQL, and CATLDR.SQL

SQL>@?/rdbms/admin/catproc.sql
-- Runs all scripts required for or used with PL/SQL: CATPRC.SQL, CATRSNAP.SQL, CATRPC.SQL, STANDARD.SQL, DBMSSTDX.SQL, PIPDL.SQL, PIDIAN.SQL, DIUTIL.SQL, PISTUB.SQL, DBMSSNAP.SQL, DBMSLOCK.SQL, DBMSPIPE.SQL, DBMSALRT.SQL, SBMSOTPT.SQL, DBMSDESC.SQL

SQL>@?/sqlplus/admin/pupbld.sql
-- re-create the PRODUCT_USER_PROFILE table
SQL> @?/rdbms/admin/utlrp.sql
-- recompiles invalid objects


3. CRS등록

srvctl add database -db orcl
-oraclehome "오라클홈경로"
-spfile  "SPFILE경로"
-diskgroup "

srvctl config database -db orcl

.control_files='',"",""
create spfile from pfile

4. LISTENER, TNS 추가

 

반응형
Posted by 돌고래트레이너
생계/Oracle2022. 12. 21. 21:00
반응형

오라클 diskgroup 이름 을 변경하는 것에 대해 알아보자 

1. dg umount
2. renamedg
3. dg mount
4. srv config
5. file rename

==================================
1. dg umount

create pfile from spfile;
@crs_user
crsctl stat res -t
srvctl stop database -d orcl

sqlplus / as sysasm
alter diskgroup OLD_DG dismount;

2. renamedg
renamedg dgname=old_dg newdgname=new_dg verbose=true check=true asm_diskstring='/dev/..'
renamedg dgname=old_dg newdgname=new_dg verbose=true asm_diskstring='/dev/..'

3. dg mount
alter diskgroup NEW_DG mount restricted;
alter diskgroup NEW_DG rename disks all;

alter diskgroup NEW_DG dismount;
alter diskgroup NEW_DG mount;

asmcmd lsdg

4. srv config

crsctl stat res -t

srvctl config database -d orcl
srvctl modify database -d orcl -a NEW_DG
srvctl modify database -d orcl -spfile +NEW_DG/spfileORCL.ora

srvctl remove diskgroup -g OLD_DG

startup nomount pfile='orahome/initORCL.ora'
alter database mount;


5. file rename
-- datafile
SELECT 'ALTER DATABASE RENAME FILE '''||NAME||''' TO '''||'+NEW_DG'||SUBSTR(NAME,9)||''';' STMT
  FROM V$DATAFILE
;

-- logfile
SELECT 'ALTER DATABASE RENAME FILE '''||NAME||''' TO '''||'+NEW_DG'||SUBSTR(NAME,9)||''';' STMT
  FROM V$LOGFILE
;

alter database open;
create spfile from pfile;
shutdown immediate;
startup

 

반응형
Posted by 돌고래트레이너
생계/Oracle2022. 12. 21. 20:57
반응형

+DATA 디스크그룹 을 사용하는 디비 testdb 의 모든 파일을  +NEW_DG 디스크 그룹으로 옮기려면 어떻게 해야할까  

1. new diskgroup 생성 
2. datafile 이동 
  2-1)  datafile (system, users, undo ) 
  2-2)  temp 
  2-3) 기타 파일들(spfile, logfile, controlfile)

* crs 관련 


1. new diskgroup 생성 

alter dg drop disk name;

create diskgroup xxx asm_string '';

 


2. datafile 이동

   asmcmd mkdir 

    * system, undo 를 제외한 datafile 들은 archive mode 상태라면 rman 에서 아래 명렁으로 온라인으로 이동 가능하다. 

    1] BACKUP AS COPY DATAFILE 4 FORMAT "+NEW_DG";
    2] SQL "ALTER DATABASE DATAFILE ''+OLD_DG/orcl/datafile/users.261.689589837'' OFFLINE";
    3] SWITCH DATAFILE "+OLD_DG/orcl/datafile/users.261.689589837" TO COPY;
    4] RECOVER DATAFILE "+NEW_DG/orcl/datafile/users.256.689682663";
    5] SQL "ALTER DATABASE DATAFILE ''+NEW_DG/orcl/datafile/users.261.689589837'' ONLINE";
    6] DELETE DATAFILECOPY "+OLD_DG/orcl/datafile/users.261.689589837";

    2-1)  datafile 

    mount 상태에서 backup/ switch 로 이동시킨다. (temp 제외 모든 datafile)

   alter database mount;

    backup/ switch 

  open 이후 불필요한 datafilecopy 삭제 

 rman> delete datafilecopy all
   

  2-2)  temp 

   temp 는 새로운 경로에 생성 후 교체  
 - create temporary temp_new '+NEW_DG'
 - alter database default temp
 - drop temp
 - alter tablespace temp_new rename to temp

  2-3) 기타 파일들(spfile, logfile, controlfile)

logfile
 - alter system add logfile
 - alter system drop logfile member

  spfile
 - srvctl config 로 현재 spfile 경로 확인

  srvctl config database -d orclcdb

- srvctl modify spfile=

  srvctl modify database -d orcl -spfile +NEW_DG/spfileORCL.ora

create spfile ='+NEW_DG' from pfile;

controlfile
 - alter database nomount
 - restore to '+NEW_DG' from '+OLD_DG' 

 - vi initORCL.ora 
 - shutdown/ startup pfile
 - alter system set controlfile ='+NEW_DG' 


asmcmd rm -rf   OLD_DG 

* crs resource 등록

ERROR: failed to establish dependency between database <database name> and diskgroup resource ora.<diskgroup name>.dg

srvctl add

srvctl config

srvctl modify 

 

 

 

반응형

'생계 > Oracle' 카테고리의 다른 글

[ASM] 스크립트 로 database 수동 생성  (0) 2022.12.22
오라클 DISKGROUP RENAME  (0) 2022.12.21
계층형 쿼리 start with connect 실행 순서  (0) 2022.09.10
extended varchar 사용법  (0) 2022.09.01
트리거 안쓰는 이유  (0) 2022.08.30
Posted by 돌고래트레이너
반응형


이태원 참사의 희생자들의 명복을 빕니다.

희생자들을 비난하지말자.
나도 20대였다면 이태원은 꼭 가보고 싶었을거고 그자리에 있었을 수도 있다.
만약 자신은 공감할수 없어서 도저히 명복을 빌어줄수없다면 최소한 침묵을 지키자.
친구, 가족을 잃은자들의 슬픔을 애도기간만이라도 생각해주었으면 한다.

행정력의 부재 아쉽다.

전조는 있었다.
앞서 8시즈음 똑같이 골목의 정체가 발생했다.
기사에 따르면 한 여성의 통솔로 진입을 멈추고 사람들이 조금씩 빠져나왔다고 한다. 그때는 이른시간이라 취한이도 적고 통솔이 되는 분위기였을듯. 그러나 사건이 발생한
10시 경 에는 취한이 도 생기고 군중속에 이상한 분위기가 퍼지면서 이성적통제가 안되었을것이다.
밀라고 한사람도 비난은 받아야겟지만 실제로 그 현장에 있지 않았다면 정확하게 알수없기에 뭐라못하겠다.

결국 그 근처에 통제인원이 있었다면 이상한 심리가 퍼져나가는것을 막을수 있지 않았을까..

경찰력을 무한대로 지원 할수없다면
혼잡도를 cctv등으로 실시간 분석해서
특정 밀집도 이상이면 골목 진입막고 나가는것만 허용하는 것을 했다면 적은인원으로도 통제가 가능했을것이다. 이태원에 핫한 골목이 수십개 있는것도 아니고 딱 한군데 그곳 뿐이라 왜 이런생각을 하지 못했을까..

할로윈하면 이태원이라는 공식이 성립한지 꽤 되었다.
누구나 할로윈하면 "이태원에 가서 분위기를 즐겨야지" 하는 생각을 하게된다.
그러나 이태원의 핫한 골목은 다른 인기 상업지와 다르게 좁은 골목에 형성되었다. 사실 인기 상업지로 성장하기에 한계가 있는 지역인데 수용가능인원보다 휠씬많은 사람이 방문한것이다.

쇼핑몰의 이야기를 한번해보자면..
사람들은 쇼핑을 특정 기간, 시간에 몰려서 한다.
크리스마스나 연말이나 저녁등.
그러나 쇼핑몰 측은 피크타임을 기준으로 서버를 가지고 있어야 한다.
그렇지 않으면 가장 매출을 많이 올릴수있는 시간에 시스템 장애로 대목을 놓치게 될테니까..

이태원의 참사는 대목인걸 알고있었지만 그에맞는 대응책의 부재로 일어난 사건이라고 생각한다.
그로인한 피해는 앞날이 창창한 젊은이들의 생명이고 다시 되돌릴수 없기에 너무도 가슴이 아프다.







반응형
Posted by 돌고래트레이너
생계/Oracle2022. 9. 10. 23:33
반응형

계층구조의 수직적 통합으로 순환관계 모델이 만들어 질수 있다

오라클에서는 start with 구문을 제공하여 간단하게 순환전개 쿼리를 작성할 수 있다.

 

1) 순환전개 SQL 

SELECT LEVEL, 부서코드, 부서명, 상위부서코드, PRIOR 부서코드
   FROM 부서
 START WITH 부서코드 ='001'
CONNECT BY 상위부서코드 = PRIOR 부서코드   
 

부서코드 '001' 을 가진 RECORD 로 부터 시작해서 해당부서코드가 상위부서코드로 되어있는 하위 레코드들을 찾아가는 쿼리이다. 

LEVEL, PRIOR 는 RECURSIVE SQL 에 제공되는 가상으로 만들어진 컬럼이다. 

LEVEL 은 해당 레코드의 depth 를, prior 는 "앞서 읽은"  이라는 의미로 이것을 단서로 계층적으로 레코드들을 찾아나간다.

 

2) 순환전개 결과의 정렬 

 SELECT LEVEL, 부서코드, 부서명, 상위부서코드
  FROM 부서
 START WITH 부서코드 ='001'
CONNECT BY 상위부서코드 = PRIOR 부서코드   
ORDER SIBLINGS BY 부서코드

 정렬된 결과를 얻기 위해서는 ORDER BY 중간에 SIBLINGS 를 써줘야 한다. 

같은 레벨에서의 정렬을 의미한다. 

 

3) 실행순서 

(1)START WITH 에서 시작해서 

(2) CONNECT BY 로 순환전개를 풀고 나서야

(3) WHERE 조건에 맞는 ROW 만 취하고 나머지는 discard 한다.

 

* 인덱스 생성 : 위 쿼리에서는 prior 에서 찾는 값이 상수가되어 '상위부서코드'를 찾게 되므로 

상위부서코드에 인덱스가 필요하다. but 역전개 쿼리 가능성도 존재하므로  '부서코드' 에도 인덱스를 

만드는게 좋다. 

 

반응형

'생계 > Oracle' 카테고리의 다른 글

오라클 DISKGROUP RENAME  (0) 2022.12.21
ASM 사용중 datafile 을 다른 diskgroup 으로 이동  (0) 2022.12.21
extended varchar 사용법  (0) 2022.09.01
트리거 안쓰는 이유  (0) 2022.08.30
dbms random  (0) 2022.08.24
Posted by 돌고래트레이너
반응형


1) 국적에 대한 생각
- 이민가면 국적이 바뀌는가
가끔 이민을 가면 국적이 바뀌는 것으로 생각하는 사람들이 있다.
이민은 거주지가 바뀌는 것이고 그것이 국적 취득까지 이어질수는 있지만, 외국인의 신분으로 해외에 거주하는 것이다.
실제로 미국에 오랜기간 거주하는 교포들 중에는 일부러 미국 국적을 취득하지 않고 한국인 신분을 유지한채
살아가는 분들도 많이 보았다. 그러나 그 자식들은 현지에서 태어나서 바로 미국국적을 취득하게 된다.
이민1세대는 자신의 뿌리가 한국인이라는 것을 거의 대부분 잃지 않고 살아가지만 그들의 자식인 2세대 부터는 상황이 조금 달라진다. 서류상 국적은 미국인이지만 부모로 부터 한국식 문화와 교육을 잃지 않고 살아온 2세대 들은 자신을 한국인으로 인식한다. 그러나 그런 과정이 없이 자라온 2세대 들은 한국은 그냥 부모님의 나라이다.
이민 3세대 부터는 그냥 현지인 인데 자신의 뿌리를 그래도 인지하는 부류와 아닌 부류가 존재한다.

-2. 외국은
한국에서만 살면 국적이라는 것을 인지하게 된다. 지정학적 이슈, 뉴스가 나올때마다 나라를 걱정하고 외국을 욕하게 된다.
그러나 외국에서 거주하면 국적이라는게 요즘세상에 의미가 있는 걸까 하는 생각이 든다.

힘들게 일본, 중국과 경쟁하며 미래를 걱정하기 보다 미국에 붙어서 제 3자의 입장으로 강건너 불구경하게 된다. 

재미교포들의 가치관 중에 이런 부류가 많은것 같다. 자신의 뿌리는 한국이면서 한국에 사는 한국인을 불쌍하게 생가하는.. 

유럽의 경우는 유럽연합 국가들 간에는 이동, 취업의 제약이 없어진지 꽤 되어서 국적이라는게 별 의미가 없다.

비유럽과 비유럽만 있다.  


-3. 정체성은 언제 형성이 되는가

한사람의 정체성은 어느 시기에 형성이 되는가 에 대한 질문을 스스로 해보았는데
초중고 교육이 한사람의 아이덴티티 형성에 지대한 영향을 미친다.

원정출산으로 국적만 취득했을 뿐, 이후로 한국에서 교육과정을 다 마친 사람은 자신을 한국인으로 생각하지
미국인으로 생각하지 않는다. 반면 국적은 한국인이지만 교육과정을 외국에서 받았다면 한국인의 정체성은 핏속에만
흐를뿐이다.
서류상의 표시보다 스스로가 어느정체성이라고 생각하는가가 중요하고 이것은 어릴적의 교육이 형성한다는 생각이다.
즉, 성인 이후 이민은 아무리 기간이 길어도 자신을 미국인으로 생각하지 않는다는것이기도 하다.

미국은 어느정도 학년이 되면 학교에서 따로 그런시간을 가진다고 한다.
미국인이지만 뿌리에대해서는 상기해준다는것이다. 이는 다양성이 미국을 이끄는 힘이라고 보기때문이다.
음식, 언어, 문화 등에 대해 뿌리를 잊지않게 해주는 노력이 필요하다.
어릴때는 자아 라는게 형성되지 않아 정체성이라는게 없지만 결국 커가면서 자신의 뿌리에대해서 생각하게된다.

한국인들이 자식교육 때문에 이민을 많이 가는데 본인들은 자식의 미래를 위한다고 한 결정이지만, 가정교육의 중요성을 등한시 할 경우 어떤 결과가 나오는 지에 대해서 잘 모르는 사람들이 있어서 오지랍을 떨어본 글이다.

반응형

'별거없는 일상 > 그냥일상' 카테고리의 다른 글

컷오프 cut-off vs 컷오버 cut-over  (0) 2024.02.24
이태원참사  (1) 2022.10.31
cool guy rule  (0) 2021.07.30
AZ 아스트라제네카 백신 1차 접종 후기  (0) 2021.04.18
요즘 먹는 신상 과자 농심 프레첼  (0) 2020.11.19
Posted by 돌고래트레이너
생계/Oracle2022. 9. 1. 01:31
반응형


- 기능 설명 

 varchar 의 길이 제한은 4000 byte 이나 이것 이상 저장하려고 하면 long 이나 lob 타입으로 변경해야함.
 그러나 long 타입은 테이블 당 1개 밖에 쓸수 없고, SUBSTR 함수 같은 것의 사용이 제약됨. 
 내부적으로는 기능개선을 중단했고, clob 사용을 권장함.
 
- 사용방법

conn / as sysdba
PURGE DBA_RECYCLEBIN

SHUTDOWN IMMEDIATE;
STARTUP UPGRADE;

ALTER SYSTEM SET max_string_size=extended;

@?/rdbms/admin/utl32k.sql
SHUTDOWN IMMEDIATE;
STARTUP;

 
-- CHECK 
show parameter max_string

alter table TEST modify varchar2(5000);


반응형

'생계 > Oracle' 카테고리의 다른 글

ASM 사용중 datafile 을 다른 diskgroup 으로 이동  (0) 2022.12.21
계층형 쿼리 start with connect 실행 순서  (0) 2022.09.10
트리거 안쓰는 이유  (0) 2022.08.30
dbms random  (0) 2022.08.24
[oracle] db접속 안될때  (0) 2022.08.15
Posted by 돌고래트레이너
생계/Oracle2022. 8. 30. 14:40
반응형

1. 트리거란 

트리거는 특정이벤트가 발생시, 그것을 기점으로 동작하는 object 이다.  

 

2. 트리거의 단점 

 - 업무 누락 가능성 : 트랜잭션의 흐름에 대해서는 대부분 인지하고 있지만,

 트리거에 대해서는 따로 신경쓰지 않으면 인지하기 어려워 누락되기 쉽고 장애 또는 로직의 누수로 이어질수 있다. 

 - 관리 포인트의 부담 : DBA 입장에서는 관리포인트가 증가하는 것도 달갑지 않다. 

비슷한 이유로 (+보안적 이유) 디비링크도 사용을 제한 할 것을 권고해왔는데, 요즘은 서비스에서는 거의 사용 안하는 편이다.

대신, EAI 등을 통해서 조회를 하라고 권고한다. 

 

3. 트렌드

요즘은 프로시저나 함수도 다 걷어내고 AP에서 부하를 많이 가져가는 추세인데,  

덕분에 DB 의 사양을 낮출수 있어 클라우드 환경이라면 비용의 감소로 이어질수 있다. 

결국 DB 는 트랜잭션을 보장하고, 단순하게 데이터를 담는 테이블, 조회를 도와주는 인덱스, 이 두가지만 사용하는 추세이다.  

 

 

 

 

반응형

'생계 > Oracle' 카테고리의 다른 글

계층형 쿼리 start with connect 실행 순서  (0) 2022.09.10
extended varchar 사용법  (0) 2022.09.01
dbms random  (0) 2022.08.24
[oracle] db접속 안될때  (0) 2022.08.15
[oracle] 아카이브모드 변경 no arch -> arch -> no arch  (0) 2022.08.14
Posted by 돌고래트레이너
생계/Oracle2022. 8. 24. 02:11
반응형

오라클에서는 DBMS_RANDOM 패키지를 통해서 랜덤한 숫자를 추출하는 기능을 제공해주고 있다.

https://docs.oracle.com/database/121/ARPLS/d_random.htm#ARPLS040

DBMS_RANDOM

VALUE Functions The basic function gets a random number, greater than or equal to 0 and less than 1, with 38 digits to the right of the decimal (38-digit precision). Alternatively, you can get a random Oracle number x, where x is greater than or equal to l

docs.oracle.com


해당패키지의 RANDOM 함수는 11G R1 부터 deprecated 되었다.
대신 VALUE 함수를 가공해서 원하는 결과가 나오게 수정하면된다.


Q) 총 100 건 데이터 중, 랜덤하게 10건 가져오기

랜덤숫자를 뽑고 그것으로 정렬한 10건을 가져오는 것으로 sql을 작성한다면..
중복 가능성이 있다.

SELECT *
FROM ( SELECT A, B, DBMS_RANDOM.VALUE(1,100) RN FROM EMP ORDER BY RN )
WHERE ROWNUM <= 10

레코드들 간 중복없는 랜덤정렬은
아래처럼 해야 한다

SELECT *
FROM ( SELECT A, B FROM EMP ORDER BY DBMS_RANDOM.VALUE )
WHERE ROWNUM <= 10



반응형
Posted by 돌고래트레이너
생계/OERR2022. 8. 17. 10:37
반응형

ora-14064 : Index with Unusable partition exists on unique/primary constraint key

파티션 인덱스가 unusuable 상태로 제약조건 추가할때 오류.

DBA_IND_PARTITIONS 뷰에서 인덱스 확인하고 REBUILD 해주자.

EX) alter index INDEX_NAME rebuild partition PARTITION_NAME;

 

반응형
Posted by 돌고래트레이너