1. 获取镜像
# 查看可用的稳定版本
sudo docker search oracle
# 镜像大小:6.85G
sudo docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
sudo docker image ls |grep oracle
2. 创建数据卷
sudo mkdir -p /share/oracle/data
3. 启动容器
sudo docker run -d -p 8087:8080 -p 1521:1521 --restart=always \
--name oracle_11g \
-v /share/oracle/data:/home/oracle/app/oracle/oradata/mydata \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
sudo docker ps -a |grep oracle
sudo docker start oracle_11g
sudo docker restart oracle_11g
sudo docker stop oracle_11g
sudo docker rm oracle_11g
4. 数据库信息
1. 连接信息
● port: 1521
● sid: helowin
● service name: helowin
● username: system
● password: oracle
2. 账户口令
● system / oracle
● sys / oracle
5. 容器配置
1. 环境变量设置
# 进入容器终端
sudo docker exec -it oracle_11g bash
# 切换超级用户(root/helowin)
su - root
# 添加系统环境变量
vi /etc/profile
内容如下:
export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2
export ORACLE_SID=helowin
export PATH=$ORACLE_HOME/bin:$PATH
生效配置:
source /etc/profile
2. 创建sqlplus软连接
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
3. 密码修改
# 1. 切换到oracle用户
su - oracle
# 2. 登录sqlplus
## 方式1
sqlplus / as sysdba
## 方式2
sqlplus /nolog
conn /as sysdba
# 3. 修改sys和system用户密码(默认:oracle),并设置密码永不过期
SQL> alter user system identified by ${新密码};
SQL> alter user sys identified by ${新密码};
SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
# 4. 其他相关操作
## 查看数据库用户和权限
SQL> select * from v$pwfile_users;
## 为system用户添加sysdba权限
SQL> grant sysdba to system;
6. 验证
# 进入终端
sudo docker exec -it oracle_11g /bin/bash
# 查看日志
sudo docker logs oracle_11g
sudo docker logs -f -t --tail=50 oracle_11g
# 查看网络
sudo docker network ls
sudo docker inspect oracle_11g
7. 客户端工具
Oracle客户端说明:
- c#(.net)连接oracle使用的是oci接口,必须安装oracle客户端,并配置本地网络服务名 tnsnames.ora。
- java可以使用thin进行连接,而不需要安装oracle客户端。
Oracle网站有精简版的客户端软件(Oracle Instant Client Basic,Basic Lite:17M,Basic:45M(含中文字符集)),解压,并编辑tnsnames.ora既可,比较方便,无需安装570M左右的标准客户端 ,而且安装后还不好卸载。
1. DbVisualizer(推荐)
Settings Format:Server Info
○ Database Type:Auto Detect(Oracle)
○ Driver(JDBC):Oracle Thin
○ Connection Type:SID
○ Database Server:${IP}
○ Database Port:1521
○ SID:helowin
○ Database Userid:system
○ Database Password:${密码}
Settings Format:Database URL
○ Database Type:Auto Detect(Oracle)
○ Driver(JDBC):Oracle Thin
○ Database URL:jdbc:oracle:thin:@${IP}:1521:helowin
○ Database Userid:system
○ Database Password:${密码}
2. Navicat Premium
Basic
○ 连接名:[自定义]
○ 连接类型:Basic(SID、ServiceName)
○ 主机名或IP地址:${IP}
○ 端口:1521
○ 服务名或SID:helowin
○ 用户名:system
○ 密码:oracle
TNS
○ 连接名:[自定义]
○ 连接类型:TNS(TNSName)
○ 网络服务名:(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = ${IP})(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = helowin)))
○ 用户名:system
○ 密码:oracle
3. PL/SQL Developer
提前安装好Oracle客户端。
修改tnsnames.ora(product\11.2.0\client_1\network\admin\),添加连接串。
ORCL_DOCKER = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ${IP})(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = helowin) ) )
-
8. 表空间操作
1. 创建数据库文件
```bash
Windows
SQL> create tablespace bdapts logging datafile ‘e:\orcl\bdapts.dbf’ size 100m autoextend on next 32m maxsize 500m extent management local; SQL> create temporary tablespace bdapts_temp tempfile ‘e:\orcl\bdapts_temp.dbf’ size 100m autoextend on next 32m maxsize 500m extent management local;
Linux
进入容器,使用oracle用户,创建文件目录
mkdir -p /home/oracle/data/ts SQL> create tablespace bdapts logging datafile ‘/home/oracle/data/ts/bdapts.dbf’ size 100m autoextend on next 32m maxsize 500m extent management local; SQL> create temporary tablespace bdapts_temp tempfile ‘/home/oracle/data/ts/bdapts_temp.dbf’size 100m autoextend on next 32m maxsize 500m extent management local;
<a name="UVuLn"></a>
## 2. 创建用户并建立与数据库文件的映射关系
```sql
create user bdapuser identified by bdapuser default tablespace bdapts temporary tablespace bdapts_temp;
-- 相关操作
-- 将用户的空间扩展为20MB
alter user bdapuser quota 20m on bdapts;
-- 给用户指定两个表空间,并且可使用大小不限制(unlimited)
alter user bdapuser quota unlimited on ${tablespace1} quota unlimited on ${tablespace2};
参数说明
- DEFAULT TABLESPACE:默认表空间。
- TEMPORARY TABLESPACE:临时表空间。
- QUOTE:创建用户后,当用户分配的空间不够时,可以扩展用户的空间。quote设置用户在表空间上占用的空间大小。如果不指定默认表空间,Oracle会将SYSTEM表空间指定为用户的默认表空间;如果没有用quota子句,用户在特定表空间的配额为0,用户不能在该表空间上创建数据对象。
- UNLIMITED ON:表空间大小不限制。
3. 权限管理
初始建立的用户没有任何权限,不能执行任何数据库操作,因此必须为用户设置权限或者角色。被赋予了某个角色的用户将拥有该角色所具备的权限,常被用到的系统预定义角色:CONNECT、RESOURCE、DBA、EXP_FULL_DATABASE、IMP_FULL_DATABASE。其中:CONNECT、RESOURCE、DBA主要用于数据库管理,数据库管理员需要被授予这三个角色。一般的数据库开发人员,需要被授予CONNECT、RESOURCE角色即可。EXP_FULL_DATABASE、IMP_FULL_DATABASE角色分别用于操作数据库导出、导入相关的操作。为用户授予角色。# 给用户赋予权限 grant connect,resource,dba to bdapuser; grant create session to bdapuser;
9. 数据库操作
数据库登陆、创建、删除 ```bash
解决SQLPlus中文字符集问题
export NLS_LANG=”SIMPLIFIED CHINESE_CHINA.AL32UTF8”
登陆Oracle
自定义用户
sqlplus bdapuser/bdapuser
管理员用户
sqlplus sys/ as sysdba
注意:以sys用户登录必须指定身份为“as sysdba”或“as sysoper”,普通用户可以不指定身份
— 查看数据库编码 SQL> select userenv(‘language’) from dual;
— 创建数据库(不推荐,生产环境下数据库需要在指定的表空间下创建) SQL> create database bdapdb;
— 删除数据库 SQL> drop database bdapdb;
— 删除表空间 SQL> drop tablespace bdapts including contents and datafiles;
- **用户创建、删除、解锁**
```sql
-- 查询数据库所有用户
select * from all_users;
-- 切换用户,以下两种方式等同
connect bdapuser/bdapuser
conn bdapuser/bdapuser
-- 创建用户
create user bdapuser identified by bdapuser;
-- 修改用户密码
alter user bdapuser identified by bdapuser;
-- 解锁用户
alter user bdapuser account unlock;
-- 删除用户
drop user bdapuser cascade;
- 表操作 ```sql — 创建表 create table T_USER (id number(10) NOT NULL primary key,user_name varchar2(40) NOT NULL,user_phone varchar2(11));
— 新增记录 insert into T_USER(id, user_name, user_phone) values(1, ‘北极星’, ‘13632608950’);
— 更新记录 update T_USER set user_name=’zhangsan1’ where user_name=’zhangsan’;
— 删除记录 delete from T_USER where id = 1;
— 删除表 truncate table T_USER; —— 删除所有数据,不会影响表结构,不会记录日志,数据不能恢复(删除很快) drop table T_USER; —— 删除所有数据,包括表结构一并删除,不会记录日志,数据不能恢复(删除很快)
— 查询记录 select * from T_USER;
— 重命名 alter table T_USER rename to T_USER_NEW;
— 字段操作 —— 增加字段 alter table T_USER add (remark varchar2(32)); alter table T_USER add (remark varchar2(32) default ‘空’ not null); —— 修改字段 alter table T_USER modify (remark number(4)); —— 重命名字段 alter table T_USER rename column remark to remark_new; —— 删除字段 alter table T_USER drop column remark; — 添加主键 alter table T_USER add primary key(id); alter table T_USER drop primary key(id);
— 索引 create [unique] index idxname on tabname(col….); drop index idxname;
— 视图 create view viewname as select statement; drop view viewname;
- **备份数据**
```bash
# 完全备份
exp bdapuser/bdapuser@helowin buffer=1024 file=/data/export/backup.dmp full=y;
# 按用户导出
exp bdapuser/bdapuser@helowin file=/data/export/sys.dmp owner=(system,sys);
# 按表名导出
exp bdapuser/bdapuser@helowin file=/data/export/tabs.dmp tables=(t1,t2);
# 按过滤条件导出
exp bdapuser/bdapuser@helowin file=/data/export/query.dmp tables=(t1) query=" where f1 like 'fg%'";
# 导出时压缩/日志
exp bdapuser/bdapuser@helowin buffer=1024 file=/data/export/backup.dmp full=y compress=y log=/data/export/log.txt;
# 备份远程服务器的数据库
exp ${用户名}/${密码}@${远程的IP}:${端口}/${实例} file=${备份路径}.dmp full=y;
## 参数说明
○ @SID: 数据库实例名
○ buffer: 缓存大小
○ file: 具体的备份文件地址
○ full: 是否导出全部文件
○ ignore: 忽略错误,如果表已经存在,则也是覆盖
○ owner:指定要导出的用户表
○ tables:导出的表名
○ query:过滤条件
○ compress:是否压缩
○ log:日志路径
- 数据导入
```
完整导入
imp bdapuser/bdapuser@helowin file=/data/load/backup.dmp full=y ignore=y log=/data/export/log.txt;
导入指定表
imp bdapuser/bdapuser@helowin file=/data/load/backup.dmp tables=(t1,t2);
导入至远程服务器数据库
imp ${用户名}/${密码}@${远程的IP}:${端口}/${实例} file=${备份路径}.dmp full=y;
<a name="GwDDY"></a>
# 10.备份(选做)
```powershell
# 关闭虚拟机
vagrant halt
# 查看虚拟机名称(VagrantFile中box的名称:config.vm.hostname)
vboxmanage list vms
# 导出当前虚拟机
cd /cygdrive/i/learn_resource/tools/vagrant/box/CentOS
vagrant package --base hk-bigdata-1 --output Vagrant-CentOS-7.6-x86_64.VirtualBox-Oracle-11g.box
# 备份之后,可通过box文件直接加载到vagrant,无需重复之前创建Oracle操作即可使用
cd /cygdrive/i/learn_resource/tools/vagrant/box/CentOS
vagrant box add centos7.6-docker-oracle Vagrant-CentOS-7.6-x86_64.VirtualBox-Oracle-11g.box
# 查看box列表
vagrant box list
# 进入box存放目录(自定义),编写VagrantFile文件
cd /cygdrive/e/vagrant/mybox/hk2
mkdir share
touch share/README.md
echo 'test' > share/README.md
Vagrant.require_version “>= 1.6.0”
boxes = [ { :name => “hk-bigdata-2”, :eth1 => “192.168.56.102”, :mem => “8192”, :cpu => “2” } ]
Vagrant.configure(2) do |config|
config.vm.box = “centos7.6-docker-oracle”
第一次安装时请注释以下三行配置,配置ssh密码验证(sshd_config)后再打开
若加载的box已经配置好ssh(如:centos7.6-docker、centos7.6-base ),则需要取消注释
config.ssh.username = ‘vagrant’ config.ssh.password = ‘vagrant’ config.ssh.insert_key = true
ssh config end
config.vm.box_check_update = false if Vagrant.has_plugin?(“vagrant-vbguest”) config.vbguest.auto_update = false end
禁用系统默认的共享目录
config.vm.synced_folder ‘.’, ‘/vagrant’, disabled: true
boxes.each do |opts| config.vm.define opts[:name] do |config| config.vm.hostname = opts[:name] config.vm.provider “virtualbox” do |v| v.customize [“modifyvm”, :id, “—name”, opts[:name]] v.customize [“modifyvm”, :id, “—memory”, opts[:mem]] v.customize [“modifyvm”, :id, “—cpus”, opts[:cpu]] end config.vm.network :private_network, ip: opts[:eth1] end end config.vm.synced_folder “./share”, “/mnt/app-data”, type: “nfs” config.bindfs.bind_folder “/mnt/app-data”,”/share”,force_user:”vagrant”,force_group:”vagrant”,o:”nonempty” end
- **启动虚拟机**
```ruby
cd /cygdrive/e/vagrant/mybox/hk2
vagrant up
vagrant halt
参考
语雀:Docker安装Oracle_11g
https://www.yuque.com/fcant/operation/docker-oracle
博客园:Oracle中Basic与TNS的区别及与Oracle三种连接方式的关系
https://www.cnblogs.com/fps2tao/p/14059678.html
CSDN:JDBC连接ORACLE的三种URL格式
https://blog.csdn.net/u012062455/article/details/52442838
博客园:Oracle Client(客户端) 安装与配置
https://www.cnblogs.com/huangjinyong/p/9443631.html
语雀:Oracle数据库基本操作
https://www.yuque.com/fcant/sql/oracle-basic