2021年6月3日 星期四


在 OracleLinux 上安裝 oracle database (19c)

    oracle 是透過 oracle-database-preinstall 和 oracle-database-ee 的

    rpm 安裝,所以會少掉很多設定的地方,像是環境變數,新建 linux 的 group 和

    user 之類的部份。


環境:


    y04 是 linux 使用者的 id


    在 VMWare 下新安裝的 OracleLinux (OracleLinux-R8-U4-x86_64-dvd_iso)

    已安裝 JAVA JDK


    用到的檔案,下載到 \home\y04\Downloads,這個位置


        compat-libcap1-1.10-7.el7.x86_64.rpm

        

            http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

        

        compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm


            http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libcap1-1.10-7.el7.x86_64.rpm


        oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm


            https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm    


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


            oracle 官網自行下載


過程(安裝 database)


    透過內建的 firefox 把下列檔案抓回來


        oracle database 要用到的套件


            http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm

            http://mirror.centos.org/centos/7/os/x86_64/Packages/compat-libcap1-1.10-7.el7.x86_64.rpm


        oracle preinstall 會幫忙處理一些新增 group 和 user 的動作


            https://yum.oracle.com/repo/OracleLinux/OL7/latest/x86_64/getPackage/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm    

        

        oracle database 本體,直接到 oracle 官網自行下載


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


    以下所有操作均在 terminal 下執行


    關防火牆


        systemctl stop firewalld.service


    關防火牆的自動啟動


        systemctl disable firewalld.service


    檢查關閉狀態


        systemctl status firewalld.service

        dead 表示未啟動開啟啟動、inactive 表示現在是關閉


    安裝相依套件


        sudo yum install libstdc++-devel ksh glibc-devel libaio-devel


        sudo yum localinstall /home/y04/Downloads/compat-libstdc++-33-3.2.3-72.el7.x86_64.rpm


        sudo yum localinstall /home/y04/Downloads/compat-libcap1-1.10-7.el7.x86_64.rpm


    安裝 oracle database preinstall

    

        sudo yum localinstall /home/y04/Downloads/oracle-database-preinstall-19c-1.0-1.el7.x86_64.rpm


    配置 oracle 帳號的環境變量 (preinstall 會在 linux 新增一個名字叫 oracle 的帳戶)


        su - root           //切換到 root 帳號

        passwd oracle       //重設 oracle 密碼為 123


        su - oracle         //切換到 oracle 帳號

        vi ~/.bash_profile  //用 vim 開 .bash_profile


        確認下面設定有在 .bash_profile


            export ORACLE_BASE=/opt/oracle

            export ORACLE_HOME=/opt/oracle/product/19c/dbhome_1

            export PATH=$ORACLE_HOME/bin:$PATH

            export ORACLE_SID=ORCLCDB

            #防止安裝過程出現亂碼

            export LANG=en_US.UTF-8

            #設定Oracle使用者端字元集,必須與Oracle安裝時設定的字元集保持一致,

            export NLS_LANG=AMERICAN_AMERICA.AL32UTF8


        su - root //切換到 root 帳號


    安裝 oracle database


        sudo yum localinstall /home/y04/Downloads/oracle-database-ee-19c-1.0-1.x86_64.rpm


    配置腳本 (簡單檢查一下腳本內容,可以略過)


        su – root 

        cd /etc/init.d/

        vi oracledb_ORCLCDB-19c 


    執行腳本前置 (執行腳本之前的動作,主要是應對一些執行腳本過程中可能發生的問題)


        對應「java.library.path 系統變數遺漏或無效」

        (The java.library.path system variable is missing or invalid. Please set java.library.path with a correct value and retry the operation.)


            yum install libnsl


        對應「檔案 "/etc/oratab" 無法存取.」

        (File "etc/oratab" is not accessible)


            這個異常好像不會中斷腳本的執行

            解法參考(https://www.cnblogs.com/datalife/archive/2011/03/15/1985253.html)


            原因是安裝 oracle database 的時候,少 執行一個 root.sh


                cd /opt/oracle/product/19c/dbhome_1/

                ./root.sh


    執行腳本

        

        su – root

        cd /etc/init.d/

        ./oracledb_ORCLCDB-19c configure


重開機


過程(建立 database 到 client 可連入)


    改 listener.ora 為允許 client 連入


        修改 listener.ora 的內容,將原本的

        listener.ora 的位置應該在 \opt\oracle\product\19c\dbhome_1\network\admin


            LISTENER =

            (DESCRIPTION_LIST =

                (DESCRIPTION =

                (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

                (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

                )

            )

        

        改成


            LISTENER =

            (DESCRIPTION_LIST =

                (DESCRIPTION =

                (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))

                (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))

                )

            )


        然後啟動或重啟 listener


            lsnrctl status  //oracle database listener 查詢狀態

        >   lsnrctl start   //oracle database listener 啟動

            lsnrctl stop    //oracle database listener 停止

        >   lsnrctl reload  //oracle database listener 重啟


    啟動及設定 oracle


        su - oracle

        sqlplus / as sysdba


            --啟動 database

            --未啟動的錯誤 ORA-01034: ORACLE not available

            SQL>startup;

            SQL>alter database open;

            SQL>exit;


            --修改 datbase 的 sys 和 system 這兩個使用者的密碼,都改成 abc

            SQL>alter user system identified by "abc";

            SQL>alter user sys identified by "abc";


            --查當前 sid

            SQL>select instance from v$thread;                           --return ORCLCDB

            or

            SQL>select * from v$version;

            SQL>select sys_context('userenv','instance_name') from dual; --return ORCLCDB


    到這步應該外部就可以連入


        測試用的軟體 (DBeaver)

        host: 192.168.1.113                 //看你自己的 linux ip

        port: 1521                          //oracle default

        database (=sid=service): ORCLCDB    //前面步驟查的

        username: system                    //內建的

        password: abc                       //前面設的


    到這邊如果都順利的話就可以連入 oracle database 中了,接下來就是建立自己要用的測試資料庫


        su - oracle

        sqlplus / as sysdba

        

        -- 確認 database 啟動了

        SQL>startup;

        SQL>alter database open;        --or SQL>alter pluggable database all open;

        


        SQL>select * from v$version;                              --先查當前版本,讓 dual 有東西

        SQL>select sys_context ('USERENV', 'CON_NAME') from dual; --知道當前容器在 CDB$ROOT 


        SQL>select pdb from v$services;              --查有那些 pdb,應廳會有一個 ORCLPDB1

        or

        SQL>show pdbs;


        SQL>alter session set container=ORCLPDB1;   --把 session 指定到 PDB


        SQL>alter database open;

        SQL>create user y04 identified by "y04";    --在當前 session 中建立一個 y04 且密碼為 y04 的帳號

        SQL>grant dba to y04;                       --設定 y04 的資料庫權限,正常是不會直接給 dba 這個權限,不過我還不熟,先這樣吧


    然後外部就可以用 y04 了,一樣外部用 DBeaver 連入


        測試用的軟體 (DBeaver)

        host: 192.168.1.113                 //看你自己的 linux ip

        port: 1521                          //oracle default

        database (=sid=service): orclpdb1   //就是pdb,因為剛剛已經把 session 切到這個 pdb 了,所以要改用這個

        username: y04

        password: y04


    註1 本機 sqlplus 登入 y04 的方式


        sqlplus 帳號/密碼@host/database(=sid=service)

        sqlplus y04/y04@localhost/orclpdb1


    註2 .base_profile


        #oracle資料庫安裝目錄

        export ORACLE_BASE=/opt/oracle

        #oracle資料庫路徑

        export ORACLE_HOME=$ORACLE_BASE/product/19c/dbhome_1

        #oracle啟動資料庫範例名

        export ORACLE_SID=ORCLCDB

        #xterm視窗模式安裝

        export ORACLE_TERM=xterm

        #設定時間格式

        NLS_DATE_FORMAT="YYYY:MM:DDHH24:MI:SS"

        #新增系統環境變數

        export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH

        #新增系統環境變數

        export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

        #防止安裝過程出現亂碼

        #export LANG=en_US.gbk

        export LANG=en_US.UTF-8

        #設定Oracle使用者端字元集,必須與Oracle安裝時設定的字元集保持一致,

        export NLS_LANG=AMERICAN_AMERICA.AL32UTF8