目录
docker 下使用oracle
一、下载oracle docker镜像
docker pull wnameless/oracle-xe-11g
二、oracle 镜像配置信息(账号密码等)
本容器提供如下安装信息:
hostname:本虚拟机ip号
端口:1521
SID: XE
username: system/sys
passworld: oracle
管理界面访问:
url: http://localhost:9090/apex
workspace:internal
username:admin
passworld:oracle
三、docker 运行oracle容器
1: 在镜像站搜索 oracle, 第一页有两个(12c 和 11g) ,12c 太大了,要 3 个 G 且下载时间太长,我下载的是 11g
2: 运行镜像文件
docker run -d -p 9090:8080 -p 1521:1521 -e ORACLE_ALLOW_REMOTE=true wnameless/oracle-xe-11g
镜像网站上说:Run this, if you want the database to be connected remotely:(远程连接)
得加
-e ORACLE_ALLOW_REMOTE=true
此处的9090:8080是将容器中的oracleXE管理界面的8080端口映射位本机的9090端口
四、oracle配置连接测试
使用Navicat for Oracle新建表空间、用户及权限赋予
参考URL: https://blog.csdn.net/linfanhehe/article/details/78769669
说明我们此次试验的Oracle数据库版本是Oracle 11g Express Edition,也即是我们平时所说的Oracle XE版本。此版本对于,我们学习来说已经是足够了。
在连接数据库只需要注意XE版本的实例就是XE,而企业版的默认实例是Orcl。
- navicat 选择其他-> 新建表空间
在弹出的界面中,我们输入表空间的名中输入我们需要在oracle在物理磁盘存储的文件名,以及表空间的初始大小以及单位。在“路径”选项中填写该表空间所在的物理磁盘路径。“自动扩展”选项中选择“on”,即允许自己动扩展表空间。如果选择“off”,那么该表空间是固定大小的,不允许扩展的。
CREATE TABLESPACE "SHEPF"
DATAFILE 'SHEPF.DBF' SIZE 100 M
- 表空间新建完毕后,我们就要来新建用户。点击面板上的“用户”选项,
新建用户的方法有两种,一种是控制面板上的“新建用户”按钮,另外一种就是在空出右键,如上图。在点击“新建用户”后,弹出的界面,填入相关的信息。
其中我们需要注意的是,在“用户名”处填写的用户名字母一定是大写。请记住一定是要大写,如果是小写的话此用户是无法连接Oracle数据库的。具体为什么是这样,我想这个可能是此软件的BUG。在“默认表空间”处,我们选择理科前面我们新建的表空间。如果我们不选择的话,会使用系统默认的表空间USERS。
在“成员属于”中我们选择了“DBA”权限。其实对于一般的用户,我们只需赋予connect、resource、create view这几个权限即可。但是这里我们为了演示方便就选择“DBA”了。有关connect、resource、create view这几个权限的赋予,
以上操作完毕后,我们可以切换到“SQL预览”选项,查看相关的SQL语句,如下图:
CREATE USER "SHEPF" IDENTIFIED BY "shepf" DEFAULT TABLESPACE "SHEPF";
GRANT "DBA" TO "SHEPF";
ALTER USER "SHEPF" DEFAULT ROLE "DBA"
- 使用新账号密码连接测试
注意 服务名/sid 还是选择 xe
五、参考
Linux 上 docker 安装 oracle-xe-11g 记录
参考URL: https://hacpai.com/article/1492914187689
docker安装wnameless/oracle-xe-11g并运行(手写超详细)
参考URL: https://www.cnblogs.com/Jin520304/p/7884441.html
docker安装oracle
参考URL: https://blog.csdn.net/wyfsxs/article/details/81869266
在docker中安装oracle并实现数据访问
参考URL: https://blog.csdn.net/Master_Shifu_/article/details/80790218
docker安装wnameless/oracle-xe-11g并运行(手写超详细)
参考URL: https://blog.csdn.net/zhichunqi/article/details/80656780
Oracle 数据库
一、常用基本概念
1. Oracle 用户(user)和模式(schema)的区别
Oracle 用户(user)和模式(schema)的区别
参考URL: https://www.cnblogs.com/dunjidan/p/4033573.html
概述:
(一)什么Oracle叫用户(user):
A user is a name defined in the database that can connect to and access objects.
大意:Oracle用户是用连接数据库和访问数据库对象的。(用户是用来连接数据库访问数据库)。
(二)什么叫模式(schema):
A schema is a collection of database objects (used by a user.). Schema objects are the logical structures that directly refer to the database’s data.
大意:模式是数据库对象的集合。模式对象是数据库数据的逻辑结构。(把数据库对象用模式分开成不同的逻辑结构)。
(三)用户(user)与模式(schema)的区别:
Schemas and users help database administrators manage database security.
大意:用户是用来连接数据库对象。而模式用是用创建管理对象的。(模式跟用户在oracle 是一对一的关系。)
详解:
一个用户一般对应一个schema,该用户的schema名等于用户名,并作为该用户缺省schema。这也就是我们在企业管理器的方案下看 到schema名都为数据库用户名的原因。
而Oracle数据库中不能新创建一个schema,要想创建一个schema,只能通过创建一个用户的方法解决 (Oracle中虽然有create schema语句,但是它并不是用来创建一个schema的),在创建一个用户的同时为这个用户创建一个与用户名同名的schem并作为该用户的缺省 shcema。
即schema的个数同user的个数相同,而且schema名字同user名字一一 对应并且相同,所有我们可以称schema为user的别名,虽然这样说并不准确,但是更容易理解一些。
一个用户有一个缺省的schema,其schema名就等于用户名,当然一个用户还可以使用其他的schema。如果我们访问一个表时,没有指明该 表属于哪一个schema中的,系统就会自动给我们在表上加上缺省的sheman名。比如我们在访问数据库时,访问scott用户下的emp表,通过 select * from emp; 其实,这sql语句的完整写法为 select * from scott.emp。
在数据库中一个对象的完整名称为schema.object,而不属user.object。类似如果我们在创建对象时不指定该对象 的schema,在该对象的schema为用户的缺省schema。这就像一个用户有一个缺省的表空间,但是该用户还可以使用其他的表空间,如果我们在创 建对象时不指定表空间,则对象存储在缺省表空间中,要想让对象存储在其他表空间中,我们需要在创建对象时指定该对象的表空间。
总结:原来Oracle是不支持创建自定义模式的,想要创建模式的话只能新建一个用户,每个用户会有一个默认的和用户名相同的模式
2. oracle大小写以及where查询条件
oracle字段不加双引号,则字段按大写查,加双引号,则按照你双引号里面大小写,里面是大写按大写里面是小写按小写。
对比mysql常用细节基础总结
- 字段名和库名
myql也可以使用双引号括起来字段名,但是mysql双引号括起来的字段名,依旧不区分大小写。oracle不支持字段和库名使用 `来包含。
总结:mysql可以不用符号括,默认不区分大小写。oracle不用符号(双引号)括起来,按大写查。
测试发现,mysql使用双引号括字段名的话,会有问题。如下sql,name字段使用了双引号,结果查出了所有数据,mysql应该是吧 "name"做字符串处理了,而不是当字段。
SELECT * FROM `t_sync_strategy` WHERE "name" NOT LIKE 'wheretest'
因此,mysql字段最好不要用双引号括起来。使用反引号 ` 或 不用符号括起来。
- where的字符串
oracle使用单引号,mysql单引号和双引号都行。
总结:where条件字符串单引号两者通用。
二、Oracle 数据库常用操作语句
Oracle 数据库常用操作语句大全
参考URL: https://www.cnblogs.com/1312mn/p/7799732.html
1. Oracle笔记之创建模式及用户和角色
Oracle笔记之创建模式及用户和角色
参考URL: https://blog.csdn.net/q1406689423/article/details/89152587
oracle在创建数据库的时候要对应一个用户,数据库和用户一般一一对应,mysql和sql server 直接通过create databse “数据库名” 就可以直接创建数据库了。Oracle是不支持创建自定义模式的,想要创建模式的话只能新建一个用户,每个用户会有一个默认的和用户名相同的模式
Oracle默认有两个已经建好的用户:system和sys,system有创建其他用户的权限,通过它就可以创建别的用户了。
#创建用户
create user 用户名 identified by 口令[即密码];
#如创建一个用户名和口令均为she的用户
create user she identified by she;
#更改用户
alter user 用户名 identified by 口令[新口令];
#如修改用户口令为
alter user she identified by 123456;
#删除用户
drop user 用户名;
#如删除she
drop user she;
注意:oracle创建完用户后,该用户还不能登录,必须给用户设置权限,才可以登录。
分配权限
GRANT connect,dba to 用户名;
2. Oracle 11g the account is locked问题的解决方法
用户为什么被锁定,可能是下面几个原因
1. 尝试多次登录未成功(可能密码不正确);
2. 此用户被管理员手工锁定;
3. 用户密码到期、未按时修改密码,等等。
Oracle 中给用户加锁与解锁的代码:
SQL> alter user 用户名 account lock; (加锁)
SQL> alter user 用户名 account unlock; (解锁)