一 、docker 安装oracle11g
docker run -d --privileged=true -p 8888:1521 -v /home/work/oracle/:/u01/app/oracle/oradata - v /etc/localtime:/etc/localtime --name oracle alexeiled/docker-oracle-xe-11g
说明:
1. 简单的管理页面端口8080,没用,就不必暴露了
2.表空间文件挂载出来,但如果重新创建oracle容器,重新创建用户指定原表空间报错,暂未找到解决办法/可考虑非docker方式安装
二、表空间及用户创建
1.进入容器:docker exec -it oracle bash; 执行sqlplus 登录,默认账号密码:system/oracle
2.创建表空间(相等于数据库)
CREATE TABLESPACE procure LOGGING DATAFILE '/u01/app/oracle/oradata/XE/procure.dbf' SIZE 32M AUTOEXTEND ON NEXT 32M MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL;
3.创建用户及授权
create user procure identified by 密码 default tablespace procure;
GRANT CONNECT,RESOURCE,dba TO procure;
三、数据库连接
1.idea、Navicat工具
2.Springboot配置。Mysql 改为oracle驱动,注意连接的验证sql改一下
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc6</artifactId>
<version>11.2.0.4.0-atlassian-hosted</version>
</dependency>
3.mybatisplus代码生成配置,需要显示设置DbType为oracle,注意数据表名使用大写,否则无法生存
四、 建表语句及数据迁移
mysql库转oracle库,需安装navicat premium版本,连接上mysql与oracle,选择顶部菜单栏“工具”->“数据同步” ,如果需要把表名字段名转为大写,可以勾选“选项”-转换对象名为大写。最好是勾选,否则后面改sql工作量更大。
五,Oracle SQL初体验
1.Oracle特性
oracle默认大小写敏感,如果所有小写如果不加“”,默认都会自动转换为大写,包括所有curd sql语句,建表语句等。
2.查询示例
如emp的car表查询如果不使用大写的表名,字段名,查询语句应该是:
select "id","carId","carName" from "car" 。
如果使用大写的表名,字段名,查询语句是:
SELECT ID, NAME, AGE FROM A_USER; 或 select id, name, age from a_user;
3.数据库规范
!!!如果使用小写表名,字段名:项目sql改动大,且不能使用mybatisplus(小写的表名无法生成代码;小写字段名则curd都会报错)
!!!推荐使用大写表名/字段名,下划线分割:这样sql改动小,主要要改动使用了mysql函数(oracle系统函数少,绝大多数与MySQL不同)的地方,最好不要使用自增ID
4.其它sql
当前数据库:select name from v$database;
版本:SELECT * FROM PRODUCT_COMPONENT_VERSION;
表空间列表:select tablespace_name from dba_tablespaces;
表空间详情:select * from dba_data_files
5.使用idea、Navicat执行oracle sql注意事项
Oracle事务不是自动提交,增删改操作需要手动执行commit ,否则其它会话连接查看不到该数据,并且如不手动commit,改动表结构会报错:资源正忙等异常