1.docker第一次安裝失敗,下一次會提示同名的容器已經存在,解決辦法:
docker container ls -a
根據上面執行的接口,選擇一個containerid,然后帶入到下面的命令
docker container rm -f containerid
2.安裝的時候報文件找不到
我是在WINDOWS上通過CHROME瀏覽器下載並在WINDOWS上解壓的(經驗告訴我解壓第一個PART會自動解壓第二個,但是並沒有),只解壓了第一個oracle安裝文件(linux.x64_11gR2_database_1of2.zip),第二個(linux.x64_11gR2_database_2of2.zip)沒有解壓。。。所以報錯。
3.修改sys/system用戶密碼
使用sqlplus / as sysdba登陸進去之后執行如下命令:
alter user sys identified by abc123;
alter user system identified by abc123;
4.創建新用戶
使用sqlplus / as sysdba登陸進去之后執行如下命令或者使用IDE工具以SYS/SYSTEM登錄之后執行:
create user acct identified by abc123;
grant resource,connect to acct;
grant select any table to acct;
grant debug any procedure,debug connect session to acct;
5.查看ORACLE SID或者SERVICENAME
一般來說SID和SERVICENAME是一致的
使用sqlplus / as sysdba登陸進去之后執行如下命令:
select instance_name from V$instance;
6.重啟服務器之后重啟docker(要求root權限)
執行命令:
docker start 043afeb3a74d
檢查oracle是否啟動成功
netstat -anp|grep 1521
7.設置開機啟動
7.1首先docker自己得先開機啟動
systemctl enable docker.service
7.2將oracle容器設置為開機啟動
要求容器沒有運行
docker run --restart=always 043afeb3a74d
要求containerid=043afeb3a74d的容器是運行着的(我自己測試這種方式)
docker update --restart=always 043afeb3a74d
測試:先reboot機器
然后執行netstat -anp|grep 1521
使用Docker安裝oracle 11g
簡介
Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關系數據庫管理系統。
借助docker,安裝oracle不再困難,只需要幾步即可。
一,安裝Docker(就不截圖了)
如果沒有root用戶或者你的用戶沒有加入sudoers列表,你是沒法玩的
yum update
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-18.06.3.ce-3.el7
二,安裝
2.1、安裝oracle 11g鏡像到docker
2.1.1、搜索符合條件的鏡像
docker search oracle NAME DESCRIPTION STARS OFFICIAL AUTOMATED oraclelinux Official Docker builds of Oracle Linux. 573 [OK] jaspeen/oracle-11g Docker image for Oracle 11g database 99 [OK] oracle/openjdk Docker images containing OpenJDK Oracle Linux 55 [OK] ……
2.1.2、選擇安裝 jaspeen/oracle-11g,等待下載安裝完成
docker pull jaspeen/oracle-11g
2.1.3、查看下載好的鏡像
docker images REPOSITORY TAG IMAGE ID CREATED SIZE jaspeen/oracle-11g latest 0c8711fe4f0f 3 years ago 281MB
注意,這個鏡像沒有直接安裝好oracle,他幫我們配置好了環境,提供了安裝腳本,我們只需要按照要求把oracle的安裝目錄配置好,啟動鏡像,即可
2.2、准備oracle 11g安裝文件
2.2.1、下載oracle 11g安裝文件
從oracle 官網 下載所需要的安裝包,這里我們以oracle 11g 為例子,分別下載 linux.x64_11gR2_database_1of2.zip
和 linux.x64_11gR2_database_2of2.zip
兩個壓縮包,下載完成后解壓到home目錄(如下目錄結構)
home └─database ├─doc ├─install ├─response ├─rpm ├─sshsetup ├─stage ├─runInstaller └─welcome.html
2.3、安裝oracle
2.3.1、注意事項
為什么要解壓成上面的目錄結構,我們先來看看jaspeen/oracle-11g
鏡像提供的安裝腳本
#!/usr/bin/env bash set -e source /assets/colorecho trap "echo_red '******* ERROR: Something went wrong.'; exit 1" SIGTERM trap "echo_red '******* Caught SIGINT signal. Stopping...'; exit 2" SIGINT if [ ! -d "/install/database" ]; then echo_red "Installation files not found. Unzip installation files into mounted(/install) folder" exit 1 fi echo_yellow "Installing Oracle Database 11g" su oracle -c "/install/database/runInstaller -silent -ignorePrereq -waitforcompletion -responseFile /assets/db_install.rsp" /opt/oracle/oraInventory/orainstRoot.sh /opt/oracle/app/product/11.2.0/dbhome_1/root.sh
從腳本里可以看到它會讀取/install/database
目錄,如果不存在會給出提示Installation files not found. Unzip installation files into mounted(/install) folder
2.3.2、啟動鏡像(執行安裝oracle)
命令的解釋:
- docker run 啟動容器的命令
- privileged 給這個容器特權,安裝oracle可能需要操作需要root權限的文件或目錄
- name 給這個容器名一個名字
- p 映射端口
- v 掛在文件到容器指定目錄 (
/home
對應容器/install/database
) - jaspeen/oracle-11g 代表啟動指定的容器
docker run --privileged --name oracle11g -p 1521:1521 -v /home:/install jaspeen/oracle-11g Database is not installed. Installing... Installing Oracle Database 11g Starting Oracle Universal Installer... Checking Temp space: must be greater than 120 MB. Actual 47303 MB Passed Checking swap space: must be greater than 150 MB. Actual 1023 MB Passed Preparing to launch Oracle Universal Installer from /tmp/OraInstall2019-04-17_08-14-23AM. Please wait ... You can find the log of this install session at: /opt/oracle/oraInventory/logs/installActions2019-04-17_08-14-23AM.log ……
這個安裝過程會很漫長,日志也很多,這里只提供部分。注意到日志里有 100% complete
打印,代表oracle安裝成功
2.3.3、安裝完成
再次查看運行狀態,oracle已經啟動完成
docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 7f53f07c93e5 jaspeen/oracle-11g "/assets/entrypoint.…" About an hour ago Up About an hour 0.0.0.0:1521->1521/tcp, 8080/tcp oracle11g
2.3.4、其他需要注意的,如果日志長時間沒有更新,檢查docker是否已經死掉
查看docker的狀態
docker ps -a
Error response from daemon: An invalid argument was supplied.
如果出現如上提示,表示docker已經死掉,我們只需要重新執行安裝步驟,讓oracle安裝完成
ps:根據我的猜測,我給docker分配的資源不夠導致的,我重新把docker的內存和cpu調高一點后oracle順利安裝完成。
docker rm oracle11g docker run --privileged --name oracle11g -p 1521:1521 -v oracleinstall:/install jaspeen/oracle-11g
三,配置
默認scott用戶是被鎖定的,我們需要解鎖,通過數據庫工具即可成功連接到oracle
3.1,連接到容器,
docker exec -it oracle11g /bin/bash
3.2,切換到oracle用戶,然后連接到sql控制台
[root@7f53f07c93e5 /]# su - oracle Last login: Wed Apr 17 08:29:31 UTC 2019 [oracle@7f53f07c93e5 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Wed Apr 17 09:29:49 2019 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL>
3.3,解鎖賬戶
SQL> alter user scott account unlock; User altered. SQL> commit; Commit complete. SQL> conn scott/tiger ERROR: ORA-28001: the password has expired Changing password for scott New password: Retype new password: Password changed Connected. SQL>
3.4,使用PL/SQL Devolper連接Oracle數據庫
編輯本機oracle客戶端或者服務端tnsnames.ora文件,增加如下配置
ACCT_LOCAL_DCOKER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.11)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
打開PL/SQL Developer選擇ACCT_LOCAL_DCOKER,輸入賬號、密碼即可
3.5使用DBeaver連接Oracle