为什么使用了Docker而不直接安装Oracle数据库: 为了学习完卸载方便. 同时也为了转换数据库版本或者同时安装多个数据库方便,并且最后卸载的时候方便.(Oracle在Win10上卸载的时候,需要手动删除修改注册表和服务项,非常费事)
全文步骤:
- 安装Docker
- 拉取Oracle 官方提供的Oracle Database Server 12c R2 镜像.
- 在Powershell或者cmd中连接镜像登陆数据库
- 创建表空间并添加数据
拉取Oracle 官方提供的镜像.
首先前往DockerHub上该镜像的地址: 链接 , 然后注册并登陆自己的DockerHub账号以及Oracle账号,并点击同意镜像的使用协议.
然后在Docker桌面端启动并登陆的条件下, 选择下面两个版本中的一个:
- Oracle Database Server 12.2.0.1 Enterprise Edition (完整版)
- Oracle Database Server 12.2.0.1 Enterprise Edition Slim Variant (精簡版)
Slim Variant
然后在powershell或者cmd中执行下面的两个命令中的对应一个(第二个是精简版):
docker pull store/oracle/database-enterprise:12.2.0.1
docker pull store/oracle/database-enterprise:12.2.0.1-slim
最后输入下面的命令启动镜像:
docker run -d -it --name oracle -p 1521:1521 -p 5500:5500 store/oracle/database-enterprise:12.2.0.1-slim
另外如果你想保留本次容器執行所建立的資料庫,可以透過 docker volume mapping 做到:
docker volume create OracleDBData
docker run -d -it --name oracle -p 1521:1521 -p 5500:5500 -v OracleDBData:/ORCL store/oracle/database-enterprise:12.2.0.1-slim
在Powershell或者其他工具连接镜像登陆数据库
官方容器的預設帳號密碼如下:
- SID:
ORCLCDB
- 帳號:
SYS
- 密碼:
Oradoc_db1
如果不從外部連線的話(不从其他电脑连接,只在本电脑使用),可以直接在powershell中通过 docker exec
命令從 Oracle 容器中執行 sqlplus
工具:
docker exec -it oracle bash -c "source /home/oracle/.bashrc; sqlplus /nolog"
接著可以透過以下 SQL 命令登入 SYS
為 SYSDBA
角色:
CONNECT SYS/Oradoc_db1 AS SYSDBA;
或是直接在執行 sqlplus
時就直接登入(将上面两条命令合并为一条):
docker exec -it oracle bash -c "source /home/oracle/.bashrc; sqlplus sys/Oradoc_db1@ORCLCDB as sysdba"
建議第一次登入就先修改
SYS
預設密碼,請參考以下命令進行修改:ALTER USER SYS IDENTIFIED BY <new-password>;
如果要透過Oracle SQL Developer登入,可以參考以下截圖進行設定(如果使用其他数据库管理IDE,如DBviewer等,配置都类似):(如果不选SID而是选服务名的话,应该填ORCLCDB.localdomain)
建立用户
當 Oracle 容器完全啟動之後,悲劇也就開始發生了,因為我連一個使用者都無法建立!
因為 Oracle 資料庫跑在容器中,有著不同的安全性架構,從 Oracle 12cR1 開始,因為新增了多租戶架構(multitenant architecture),可以讓你在一個資料庫容器中執行多個租戶資料庫(tenant databases),所以建立使用者的 SQL 命令稍微有點不一樣,而這個問題對一個不常使用 Oracle 的開發者來說也太困難了。
如果你用傳統的 SQL 命令建立一個新用戶,就會得到這個錯誤:ORA-65096: invalid common user or role name
:
SQL> CREATE USER WILL IDENTIFIED BY yourpassword;
CREATE USER WILL IDENTIFIED BY yourpassword
*
ERROR at line 1:
ORA-65096: invalid common user or role name
而正確建立使用者的方法,應該用以下 SQL 命令:
ALTER SESSION SET "_ORACLE_SCRIPT"=TRUE;
CREATE USER will IDENTIFIED BY yourpassword;
GRANT CONNECT, RESOURCE, DBA TO WILL;
ALTER SESSION SET "_ORACLE_SCRIPT"=FALSE;
接著就可以用新帳號登入連線:
CONNECT WILL/yourpassword AS SYSDBA;
刪除用户
基本上,只要跟「使用者」相關的操作,在 Oracle 容器中都會遇到問題,所以若要刪除上一節所建立的 WILL
帳號的話,必須使用以下 SQL 命令:
ALTER SESSION SET "_ORACLE_SCRIPT"=TRUE;
DROP USER WILL CASCADE;
ALTER SESSION SET "_ORACLE_SCRIPT"=FALSE;
建立用户并建立数据库
首先打开Dockers中该镜像的CLI:
然后运行下面的命令建立一个:
mkdir /home/oracle/table
然后回到刚刚的powershell 建立表空间Test:
CREATE TEMPORARY TABLESPACE Test_TEMP -- 建立临时表空间
TEMPFILE '/home/oracle/table.DBF'
SIZE 32M
AUTOEXTEND ON
EXTENT MANAGEMENT LOCAL;
CREATE TABLESPACE Test -- 建立表空间
LOGGING
DATAFILE '/home/oracle/Test.DBF'
SIZE 32M
AUTOEXTEND ON
EXTENT MANAGEMENT LOCAL;
然后注册用户(用户test,密码123456)并配置Test表空间的权限:
ALTER SESSION SET "_ORACLE_SCRIPT"=TRUE; -- 注意这里
CREATE USER test IDENTIFIED BY 123456 ACCOUNT UNLOCK DEFAULT TABLESPACE Test TEMPORARY TABLESPACE Test_TEMP;
GRANT CONNECT,RESOURCE TO test;
GRANT DBA TO test;
ALTER USER test QUOTA UNLIMITED ON test;
然后登陆该用户并向表空间中填入数据:
connect test/123456;
create table test.student(
id int not null primary key,
name varchar(20)
);
insert into student values(123,'张三');
commit;
验证数据是否写入:
SELECT * FROM student;
参考:
- The Will Will Web