安装环境:CentOS 7.6、Docker20.10.12、oracle_11g
注:如果安装成功后无法访问,请检查防火墙和端口
Oracle容器安装
拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
下载完成后 查看镜像
docker images
运行容器
docker run -d -p 1521:1521 --restart=always --name oracle11g registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
进入容器
docker exec -it oracle11g bash
切换用户(root的默认用户密码为helowin)
su root
编辑profile文件配置Oracle环境变量
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
# 保存配置
:wq
加载环境变量
source /etc/profile
创建软链接
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
切换到Oracle 用户
su oracle
登录sqlplus并修改sys、system用户密码
# 登录
sqlplus /nolog
# 连接oracle
conn /as sysdba
# 修改system用户账号密码
alter user system identified by system;
# 修改sys用户账号密码
alter user sys identified by system;
# 创建个人使用的临时表空间、表空间、用户(详细请看[常用操作]模块)
# 修改密码规则策略为密码永不过期
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
# 修改数据库最大连接数据
alter system set processes=1000 scope=spfile;
# 退出oracle
conn /as sysdba
# 关闭数据库
shutdown immediate;
# 启动数据库
startup;
# 退出软链接
exit;
重启Oracle容器
docker restart oracle11g
使用navicat连接数据库
连接参数
IP: 服务器ip地址
端口:1521
SID:helowin
账号:system
密码:system
常用操作
创建用户、表空间
创建完数据库后,并不能立即在数据库中建表,必须先创建该数据库的用户,并且为该用户指定表空间。
一个大的数据库新建多个表空间,创建用户并指定对应的表空间、授权,该用户就可以在自己的表空间中进行新建表等操作
# 创建临时表空间
CREATE TEMPORARY TABLESPACE [临时表空间名称]
TEMPFILE [指定路径下的数据文件.DBF] --表空间对应的数据文件
SIZE 100M --数据文件大小
AUTOEXTEND ON NEXT 10M --数据文件不够用自动扩展,每次扩展大小
MAXSIZE 500M --数据文件最大文件大小
EXTENT MANAGEMENT LOCAL; --指定新建表空间为本地管理方式的表空间
# 创建表空间
CREATE TABLESPACE [表空间名称]
DATAFILE [指定路径下的数据文件.DBF] --表空间对应的数据文件
SIZE 100M --数据文件大小
AUTOEXTEND ON NEXT 10M --数据文件不够用自动扩展,每次扩展大小
MAXSIZE 500M --数据文件最大文件大小
LOGGING --启动重做日志
PERMANENT --指定表空间为永久性的表空间
EXTENT MANAGEMENT LOCAL; --指定新建表空间为本地管理方式的表空间
# 新建用户[用户名]并选择刚创建的表空间[表空间名称]
CREATE USER [用户名] IDENTIFIED BY [密码]
DEFAULT TABLESPACE [表空间名称]
TEMPORARY TABLESPACE [临时表空间名称];
# CONNECT,RESOURCE,DBA权限赋予[用户名]用户
GRANT CONNECT,RESOURCE,DBA TO [用户名];
# 多权限赋予[用户名]用户
GRANT CREATE USER,DROP USER,ALTER USER ,CREATE ANY VIEW ,
DROP ANY VIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,
DBA,CONNECT,RESOURCE,CREATE SESSION TO [用户名];
操作示例
创建临时表空间
CREATE TEMPORARY TABLESPACE DEVICE_MANAGEMENT_SERVICE_TEMP TEMPFILE '/home/oracle/app/oracle/oradata/helowin/device01_temp.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 500M EXTENT MANAGEMENT LOCAL;
创建数据表空间
CREATE TABLESPACE DEVICE_MANAGEMENT_SERVICE DATAFILE '/home/oracle/app/oracle/oradata/helowin/device01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M MAXSIZE 500M LOGGING PERMANENT EXTENT MANAGEMENT LOCAL;
创建用户并指定表空间
CREATE USER device IDENTIFIED BY "123.com" DEFAULT TABLESPACE DEVICE_MANAGEMENT_SERVICE TEMPORARY TABLESPACE DEVICE_MANAGEMENT_SERVICE_TEMP;
给用户授予权限
GRANT CONNECT,RESOURCE,DBA TO device;
注意事项
- 表空间、用户、字段的命名,按照规范需要大写、并严格避免和关键字重复,方便后续升级、数据迁移等等
- Oracle中,表空间和用户是对应的,需要注意操作顺序:
-
- 创建:先创建表空间,再创建用户
- 删除:先删除用户,再删除表空间
- Oracle建表后,使用时发现找不到:Oracle11特性,新建一张空表时,需要等插入第一行数据后,才会将该表插入表空间
- 对于一般的用户,只需赋予 connect、resource、create view 这3个权限即可,不行再给 dba 权限
- 查询数据库编码:select userenv('language') from dual;
常见问题
SP2-0640: Not connected
原因未登录
conn /as sysdba;
ORA-00922: missing or invalid option
修改密码遇见,导致原因:表名中不能有符号点 ".",而且长度不能太长,最大30字符,否则超过长度会报
解决:减长度,加引号
ORA-12514: TNs:istener does not currently know of service requested in connect descriptor
服务ID错误
确定服务ID既可
导入数据乱码
字符集不对应,修改既可
# 查询字符集
select instance_name from V$instance;
ORA-00988: missing or invalid password(s)
一般是因为密码的设置不符合命名规范:
1:密码是关键字,但是没有用双引号包裹起来。
2:密码以数字开头,但是没有用双引号包裹起来
3:密码包含特殊字符,并且没有用双引号包裹起来。