글 남기는 시점 : 2022년 6월20일

 

EC2 Instance : Redhat free tier

version : Linux version 4.18.0-372.9.1.el8.x86_64 (mockbuild@x86-vm-09.build.eng.bos.redhat.com) (gcc version 8.5.0 20210514 (Red Hat 8.5.0-10) (GCC)) #1 SMP Fri Apr 15 22:12:19 EDT 2022

Oracle : oracle-database-ee-19c-1.0-1.x86_64.rpm

https://www.oracle.com/database/technologies/oracle-database-software-downloads.html

01. aws.amazon.com/ko/free 가입
 
02. Region을 아시아-서울 로 설정
 
03. 프리티어로 인스턴스 생성 : t2.micro
    - 레드햇 설정 (★★★ 조언 : 괜히 다른 OS로 삽질하지 말고 처음부터 레드햇으로 설치하세요 ★★★)
    - 볼륨 20G 설정
    - 용량확인 명령어   : https://velog.io/@hyeonseop/ec2-용량-full일-때-대처법
      df -gT 또는 lsblk : 프로젝트 중간에 용량을 증설하면 재기동 해줘야 함
 
04. putty 설정시 ppk 파일로 접속
    - d2coding으로 폰트변경
    - Ubuntu AMI       : ubuntu
      Amazon Linux2    : ec2-user
      Amazon Lunux AMI : ec2-user
      Debian AMI       : admin or root
      Fedora AMI       : ec2-user or fedora
 
05. 리눅스 버전 확인
    - 리눅스의 배포판 버전 확인
      1) $ grep . /etc/*-release
      2) $ cat /etc/*-release | uniq
    - 리눅스 커널 버전 확인
      1) uname
      2) uname -r
      3) cat /proc/version
 
06. root 계정 활성화
    $ sudo passwd root
    $ sudo vi /etc/ssh/sshd_config
      #PermitRootLogin yes 부분의  주석(#)을 삭제하고 저장
    $ sudo mkdir /root/.ssh
    $ sudo cp /home/ec2-user/.ssh/authorized_keys /root/.ssh
    $ sudo systemctl restart sshd
    ┌──────────────────────────────────┐
    │ 이후 root로 재접속하여 작업 진행
    └──────────────────────────────────┘
 
07. git, zsh 설치
    - git설치 : sudo yum update -y , sudo yum install git -y , git version
    - zsh설치 : https://codingrabbit.tistory.com/28
 
08. fileziller 접속
    - sftp로 발급받은 key파일 지정하여 접속
 
09. oracle 환결설정
    - 레드햇에 오라클 설치 참조 : https://pliss.tistory.com/105
    - EC2 보안그룹에 1521 포트 추가

    - (Free Tier 메모리 부족으로 필요시 설정함) swap memory설정
      $ cd /
      $ mkdir /swap
      $ dd if=/dev/zero of=/swap/swapfile bs=1024 count=2097152
      $ cd /swap
      $ mkswap swapfile
      $ swapon swapfile

    - 권한그룹설정 (oracle rpm 은 oinstall 이라는 그룹의 oracle 이라는 사용자로 설치되기 때문에 미리 계정 생성)
      $ cd /home
      $ groupadd oinstall
      $ groupadd dba
      $ tail /etc/group
      $ useradd -g oinstall -G dba oracle
      $ passwd oracle
      $ systemctl restart sshd

    - 커널 설정
      $ vi /etc/sysctl.conf
        fs.aio-max-nr = 1048576
        fs.file-max = 6815744
        #kernel.shmall = 2097152
        #kernel.shmmax = 536870912
        kernel.shmmni = 4096
        kernel.sem = 250 32000 100 128
        net.ipv4.ip_local_port_range = 9000 65500
        net.core.rmem_default = 262144
        net.core.rmem_max = 4194304
        net.core.wmem_default = 262144
        net.core.wmem_max = 1048576

    - 자원 제한 설정
      $ vi /etc/security/limits.conf
        oracle soft nproc 2047
        oracle hard nproc 16384
        oracle soft nofile 1024
        oracle hard nofile 65536
        oracle soft stack 10240

    - 전체적용 및 확인
      $ reboot
      $ /sbin/sysctl –p

    ★ oracle 로 사용자전환하여 하위 작업 진행 ★
     ┌───────────────┐
     │ $ su - oracle
     └───────────────┘
    - 오라클 환경 변수 설정
      $ vi /home/oracle/.bash_profile
        ORACLE_BASE=/opt/oracle
        ORACLE_SID=XE
        ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1
        ORACLE_HOME_LISTNER=$ORACLE_HOME/bin/lsnrctl
        PATH=$ORACLE_HOME/bin:$PATH
        export PATH
        export ORACLE_BASE
        export ORACLE_SID
        export ORACLE_HOME
        export ORACLE_LISTNER
        export TMP=/tmp
        export TMPDIR=$TMP
      $ source /home/oracle/.bash_profile
 
10. oracle 설치 (Ubuntu)
    ┌─디펜던시 설치 (우분투일 경우)───────────────────────────

     │
     │ 1) 우분투 디스크 늘려주기 : 안늘려주면 2기가짜리 rpm -> deb 변환하다가 "No space left on device" 에러남
     │    $ lsblk -f
     │      NAME     FSTYPE   FSVER LABEL           UUID                                 FSAVAIL FSUSE% MOUNTPOINTS
     │      loop0    squashfs 4.0                                                              0   100% /snap/amazon-ssm-agent/5656
     │      loop1    squashfs 4.0                                                              0   100% /snap/core18/2409
     │      loop2    squashfs 4.0                                                              0   100% /snap/core20/1518
     │      loop3    squashfs 4.0                                                              0   100% /snap/lxd/22923
     │      loop4    squashfs 4.0                                                              0   100% /snap/snapd/16010
     │      xvda
     │      ├─xvda1  ext4     1.0   cloudimg-rootfs 767f2b75-d030-4999-951c-d4ab6b37f31f    7.2G    53% /
     │      ├─xvda14
     │      └─xvda15 vfat     FAT32 UEFI            83EA-FFE2                              99.1M     5% /boot/efi
     │
     │    $ mount -o size=10M,rw,nodev,nosuid -t tmpfs tmpfs /tmp
     │    $ xfs_growfs -d /
     │      xfs_growfs: / is not a mounted XFS filesystem
     │    $ resize2fs /dev/xvda1                          : ec2에서 용량 늘려 설정 후 ex4 파일 시스템일 경우 resize2fs 명령어로 적용
     │      resize2fs 1.46.5 (30-Dec-2021)
     │      The filesystem is already 4165883 (4k) blocks long.  Nothing to do!
     │    $ df -h
     │      Filesystem      Size  Used Avail Use% Mounted on
     │      /dev/root        16G  8.1G  7.3G  53% /
     │      tmpfs           484M     0  484M   0% /dev/shm
     │      tmpfs           194M  844K  193M   1% /run
     │      tmpfs           5.0M     0  5.0M   0% /run/lock
     │      /dev/xvda15     105M  5.3M  100M   5% /boot/efi
     │      tmpfs            97M  4.0K   97M   1% /run/user/0
     │      tmpfs            10M     0   10M   0% /tmp
     │    $ umount /tmp
     │
     │ 2) 우분투 메모리 늘려주기
     │    $ dd if=/dev/zero of=/swapfile bs=128M count=32 : 스왑 파일의 읽기 및 쓰기 권한을 업데이트
     │    $ chmod 600 /swapfile                           : Linux 스왑 영역을 설정
     │    $ mkswap /swapfile                              : 스왑 공간에 스왑 파일을 추가하여 스왑 파일을 즉시 사용할 수 있도록
     │    $ swapon /swapfile                              : 프로시저가 성공적인지 확인
     │    $ swapon -s                                     : /etc/fstab 파일을 편집하여 부팅 시 스왑 파일을 시작
     │    $ sudo vi /etc/fstab                            : 재부팅 후에도 적용되도록 파일 끝에 다음 줄을 새로 추가
     │      /swapfile swap swap defaults 0 0
     │    $ swapon --show
     │    $ free -h
     │ - 스왑파일삭제
     │    $ swapoff -v /swapfile             : 스왑 비활성
     │    $ vi /etc/fstab                    : fstab파일 오픈
     │    $ /swapfile swap swap defaults 0 0 : 추가했던 라인 삭제
     │    $ rm /swapfile                     : 스왑 파일 삭제
     │
     │ 3) apt-get으로 yum, python, java 설치
     │    $ apt-get update && sudo apt-get upgrade        : apt(Advanced Packaging Tools) 은 리눅스에서 패키지 관리를 담당
     │    $ apt-get update                                : 설치 되어있는 패키지들의 새로운 버젼이 있는지 확인할 때 해당 명령어를 사용합니다
     │    $ apt-get upgrade                               : 위에 있는 apt-get update를 통해서 확인한 패키지들의 최신 버전에 따라서 패키지들의 버전을 업그레이드 해주는 명령어입니다
     │    $ apt install yum
     │    $ apt-get -y install yum
     │    $ apt update
     │    $ apt -y install yum
     │    $ apt-get update
     │    $ apt-get install yum
     │    $ apt install python-lzma
     │    $ apt install python-sqlitecachec
     │    $ apt install python-urlgrabber
     │    $ apt install python-pycurl
     │    $ apt install python-urlgrabber
     │    $ apt-get install openjdk-11-jdk
     │    $ javac -version 
     │    $ vi  ~/.bashrc
     │      export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
     │      export PATH=$PATH:$JAVA_HOME/bin 
     │    $ source ~/.bashrc                              : 현재 실행중인 shell에 즉시 적용 (새로 실행한 shell에서는 필요없음)
     │    $ echo $JAVA_HOME
     │
     │ 4) Alien 버전업 설치
     │    Alien은 레드햇 패키지(.rpm) 를 데비안 패키지(.deb) 로 변환해 주는 프로그램
     │    RPM은 RedHat Package Manager 로 Linux Standaard Base의 표준 패키지포맷 중 하나이며,
     │    레드헷 계열(Redhat, CentOS, Fedora)계열의 리눅스에서 사용.
     │    반면 Debian, Ubuntu 같은 데비안 계열에서는 deb 포맷의 파일을 사용하고,
     │    apt-get라는 패키지관리도구를 이용하는데, 확장자가 .rpm 인 파일은 apt-get 으로 설치가 되지 않아 
     │    이때 Alien을 이용하면 rpm파일을 바로 설치하거나 deb파일로 변환하여 설치가 가능함
     │
     │    ★ 이전 alien 이 문제가 있어 재설치 ★
     │    $ uname -i        : 서버 버젼 확인 64 bit 
     │    $ apt-get install -y alien libaio1 unixodbc
     │    $ apt-get --fix-broken install
     │    $ apt-get remove alien
     │    $ curl -O http://archive.ubuntu.com/ubuntu/pool/main/a/alien/alien_8.90_all.deb
     │    $ dpkg -i alien_8.90_all.deb : dpkg(Debian Package) 패키지
     │
     │ 5) 오라클 rpm -> dev 변경
     │    $ alien --scripts -d  oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm : 파일변환 rpm -> deb
     │    $ alien     -i -c -v  oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm : 파일변환없이 바로설치
     │    $ apt-get     install dpkg-dev debhelper build-essential
     │    $ yum -y localinstall oracle-database-preinstall-21c-1.0-1.el7.x86_64.rpm
     │
     │    $ dpkg --install ora*.deb
     └─────────────────────────────────────────

 
10. oracle 설치
    -  EC2에서 사용가능한 ORACLE 버전 확인 : https://teratail.com/questions/318951

    -  다운로드 : https://www.oracle.com/database/technologies/oracle-database-software-downloads.html
                    -> oracle-database-ee-19c-1.0-1.x86_64.rpm
                    https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/index_src.html
                    -> oracle-database-preinstall-19c-1.0-3.el7.x86_64.rpm
     ┌───────────────┐
     │ $ su - root 
     └───────────────┘
    - 내컴퓨터로 받은 오라클 파일을 EC2로 옮긴 후 파일 소유자/그룹 변경
       $ chown oracle /home/oracle/install/oracle-database-*
       $ chown :oinstall /home/oracle/install/oracle-database-*
    -  디펜던시 설치
       $ yum update
       $ yum install -y http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libcap1-1.10-7.el7.x86_64.rpm
       $ yum -y install bc bind-utils binutils glibc-devel ksh libnsl libaio libaio-devel libstdc++-devel make net-tools nfs-utils smartmontools sysstat unzip xorg-x11-utils xorg-x11-xauth
    - 오라클 rpm 설치
       $ rpm -Uvh /home/oracle/install/oracle-database-preinstall-19c-1.0-3.el7.x86_64.rpm

              warning: /home/oracle/install/oracle-database-preinstall-19c-1.0-3.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
              Verifying...                          ################################# [100%]
              Preparing...                          ################################# [100%]
              Updating / installing...
                 1:oracle-database-preinstall-19c-1.################################# [100%]

       $ rpm -Uvh /home/oracle/install/oracle-database-ee-19c-1.0-1.x86_64.rpm

              warning: /home/oracle/install/oracle-database-ee-19c-1.0-1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
              Verifying...                          ################################# [100%]
              Preparing...                          ################################# [100%]
              Updating / installing...
                 1:oracle-database-ee-19c-1.0-1     ################################# [100%]
              [INFO] Executing post installation scripts...
              [INFO] Oracle home installed successfully and ready to be configured.
              To configure a sample Oracle Database you can execute the following service configuration script as root: /etc/init.d/oracledb_ORCLCDB-19c configure
 
11. oracle 설정
    - 환경변수 설정
      $ cd /opt/oracle/product/19c/dbhome_1/network/admin
      $ vi listener.ora
        SID_LIST_LISTENER =
            (SID_LIST =
                (SID_DESC =
                    (SID_NAME = PLSExtProc)
                    (ORACLE_HOME = /opt/oracle/product/19c/dbhome_1)
                    (PROGRAM = extproc)
                )
                (SID_DESC =
                    (GLOBAL_DBNAME = XE)
                    (ORACLE_HOME = /opt/oracle/product/19c/dbhome_1)
                    (SID_NAME = XE)
                    (SERVICE_NAME = XE)
                )
            )

        LISTENER =
            (DESCRIPTION_LIST =
                (DESCRIPTION =
                    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
                    (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
                )
            )

        DEFAULT_SERVICE_LISTENER = (XE)

      $ vi tnsnames.ora
        XE =
            (DESCRIPTION =
                (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
                (CONNECT_DATA =
                    (SERVER = DEDICATED)
                    (SERVICE_NAME = XE)
                )
            )

        EXTPROC_CONNECTION_DATA =
            (DESCRIPTION =
                (ADDRESS_LIST =
                    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))
                )
                (CONNECT_DATA =
                    (SID = PLSExtProc)
                    (PRESENTATION = RO)
                )
            )
 
12. oracle 기동
    $ lsnrctl -> start -> status

    - 기동화면
    $ lsnrctl
             LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 19-JUN-2022 15:44:05
             Copyright (c) 1991, 2019, Oracle.  All rights reserved.
             Welcome to LSNRCTL, type "help" for information.

    LSNRCTL> start

             Starting /opt/oracle/product/19c/dbhome_1/bin/tnslsnr: please wait...

             TNSLSNR for Linux: Version 19.0.0.0.0 - Production
             System parameter file is /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
             Log messages written to /opt/oracle/diag/tnslsnr/ip-172-31-7-255/listener/alert/log.xml
             Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
             Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))

             Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
             STATUS of the LISTENER
             ------------------------
             Alias                     LISTENER
             Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
             Start Date                19-JUN-2022 15:44:08
             Uptime                    0 days 0 hr. 0 min. 0 sec
             Trace Level               off
             Security                  ON: Local OS Authentication
             SNMP                      OFF
             Default Service           XE
             Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
             Listener Log File         /opt/oracle/diag/tnslsnr/ip-172-31-7-255/listener/alert/log.xml
             Listening Endpoints Summary...
               (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
               (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
             Services Summary...
             Service "PLSExtProc" has 1 instance(s).
               Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
             Service "XE" has 1 instance(s).
               Instance "XE", status UNKNOWN, has 1 handler(s) for this service...
             The command completed successfully

    LSNRCTL> status

             Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC_FOR_XE)))
             STATUS of the LISTENER
             ------------------------
             Alias                     LISTENER
             Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
             Start Date                19-JUN-2022 15:44:08
             Uptime                    0 days 0 hr. 0 min. 11 sec
             Trace Level               off
             Security                  ON: Local OS Authentication
             SNMP                      OFF
             Default Service           XE
             Listener Parameter File   /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
             Listener Log File         /opt/oracle/diag/tnslsnr/ip-172-31-7-255/listener/alert/log.xml
             Listening Endpoints Summary...
               (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC_FOR_XE)))
               (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
             Services Summary...
             Service "PLSExtProc" has 1 instance(s).
               Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
             Service "XE" has 1 instance(s).
               Instance "XE", status UNKNOWN, has 1 handler(s) for this service...
             The command completed successfully
 
13. SQL PLUS 확인
    $ ........................ 알아보는 중
 
99. 추가작업
    - EC2(Linux) 사용자 별 .pem 파일 생성하기 및 ec2-user 비활성화
      https://junhyeong-jang.tistory.com/10

+ Recent posts