Linux Docker 安装oracle19c数据库
Oracle 19c 是甲骨文公司(Oracle Corporation)发布的一款关系型数据库管理系统(RDBMS),属于 Oracle Database 19c 版本。它是 Oracle 12c 和 18c 系列的后续版本,提供了多个重要的功能改进和新特性,旨在提升数据库的性能、可扩展性和可靠性。Oracle 19c 的特点包括:
自动化与优化:
自动化管理功能:Oracle 19c 引入了更多的自动化管理特性,例如自动化的存储管理和内存管理,使数据库管理员的工作变得更加轻松。
自动索引功能:Oracle 19c 在数据库中自动创建索引并在查询执行时根据需求优化索引,提高了查询效率。
性能提升:
采用了更高效的存储引擎和查询优化器,提高了数据处理的速度和吞吐量。
高性能的 SQL 执行:增加了对大规模查询的优化,支持大数据量时仍能保证稳定的查询性能。
多云与混合云支持:
支持在多云环境下的运行,可以同时在多个云平台或本地数据中心中进行部署,提供灵活的云集成选项。
新功能:
JSON 支持:Oracle 19c 增强了对 JSON 数据类型的支持,方便处理非结构化数据。
自动化的数据加密:为提高数据安全性,Oracle 19c 提供了更加灵活和自动化的数据加密方案。
多租户架构(CDB/PDB):引入了多租户架构,允许用户在单个数据库实例中创建多个数据库容器(PDB),实现资源共享和管理优化。
高可用性与灾难恢复:
提供了增强的备份、恢复和高可用性功能,包括更快的故障恢复和容灾能力。
版本稳定性:
Oracle 19c 被认为是一个“长期支持版本”(Long Term Support,LTS),意味着该版本会得到长时间的更新和支持,适合用于企业级应用。
Oracle 19c 是企业级应用的理想选择,特别适合那些需要高性能、可靠性以及灵活扩展能力的环境。
下载地址:
Oracle 数据库下载官网:数据库软件下载 |神谕
SQL Develope 数据库连接工具下载官网:Oracle SQL Developer Downloads
国内容器镜像拉取地址:docker.io/heartu41/oracle19c:latest - 镜像下载 | docker.io
第一步 安装Docker
#移除旧的Docker版本yum remove -y docker docker-client docker-client-latest docker-ce-cli docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine#清理旧缓存并重新生成yum clean allyum makecache# 安装必要的依赖包yum install -y yum-utils device-mapper-persistent-data lvm2#添加阿里云 Docker 的仓库yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo#安装Dockeryum install -y docker-ce-20.10.24 docker-ce-cli-20.10.24 containerd.io#设置开机自启动sudo systemctl enable dockersudo systemctl start dockersudo systemctl status docker#查看可用的Docker版本yum list docker-ce --showduplicates | sort -r#查看docker版本docker --version#查看docker详细信息docker info
第二步 拉取镜像 并启动
迁移默认根目录
#拉取镜像 docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/heartu41/oracle19c:latest# 创建目录mkdir -p /data/oracle19c/oradatamkdir -p /data/oracle19c/backup# 设置权限(Oracle 容器通常需要 777 或特定权限)chmod -R 777 /data/oracle19c#启动镜像命令docker run -d \\ --name oracle19c-test \\ --restart=unless-stopped \\ --cpus=2 \\ --memory=4g \\ -p 1521:1521 \\ -p 5500:5500 \\ -e ORACLE_SID=ORCL \\ -e ORACLE_PDB=ORCLPDB1 \\ -e ORACLE_PWD=\'2;%uZ3I1!Wh8\' \\ -e ORACLE_CHARACTERSET=ZHS16GBK \\ -v /data/oracle19c/oradata:/opt/oracle/oradata \\ -v /data/oracle19c/backup:/opt/oracle/backup \\ --health-cmd=\"lsnrctl status\" \\ --health-interval=2m \\ \'swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/heartu41/oracle19c\' 解释说明:docker run -d \\ # 后台运行容器 --name oracle19c-prod \\ # 为容器指定名称为 oracle19c-prod --restart=unless-stopped \\ # 设置容器自动重启策略,除非手动停止,否则容器会在系统重启后自动启动 --cpus=2 \\ # 限制容器使用 2 个 CPU 核心 --memory=4g \\ # 限制容器使用 4GB 内存 -p 1521:1521 \\ # 将宿主机的 1521 端口映射到容器的 1521 端口(Oracle 数据库默认端口) -p 5500:5500 \\ # 将宿主机的 5500 端口映射到容器的 5500 端口(用于 Oracle 数据库的 Web 控制台) -e ORACLE_SID=ORCLCDB \\ # 设置 Oracle 实例名为 ORCLCDB -e ORACLE_PDB=ORCLPDB1 \\ # 设置 Oracle PDB(Pluggable Database)为 ORCLPDB1 -e ORACLE_PWD=YourStrongPassword@123 \\ # 设置 Oracle 数据库管理员密码 -e ORACLE_CHARACTERSET=ZHS16GBK \\ # 设置 Oracle 数据库字符集为 AL32UTF8 -v /data/oracle19c/oradata:/opt/oracle/oradata \\ # 将宿主机的 /data/oracle19c/oradata 目录挂载到容器的 /opt/oracle/oradata 目录(存储数据库数据) -v /data/oracle19c/backup:/opt/oracle/backup \\ # 将宿主机的 /data/oracle19c/backup 目录挂载到容器的 /opt/oracle/backup 目录(存储数据库备份) --health-cmd=\"lsnrctl status\" \\ # 设置健康检查命令,检查 Oracle Listener 的状态 --health-interval=2m \\ # 设置健康检查的时间间隔为 2 分钟 swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/heartu41/oracle19c # 使用 Oracle 19c 镜像(指定镜像地址)
第三步、关闭防火墙
# 关闭防火墙systemctl stop firewalldsystemctl disable firewalld # 关闭selinux# 临时setenforce 0 # 永久sed -i \'s/enforcing/disabled/\' /etc/selinux/config
第四步、使用数据库连接工具
查看容器启动日志docker logs -f oracle19c-prod 容器启动成功之后:进入docker容器docker exec -it oracle19c-prod bash连接数据库sqlplus / as sysdba查看实例名命令(也就是SID)SELECT instance_name FROM v$instance; SID介绍:SID(System Identifier,系统标识符)是Oracle数据库实例的唯一名称标识。它是Oracle数据库实例在操作系统层面的唯一标识,用于区分同一台服务器上运行的不同Oracle实例。
查看容器启动日志出现以下情况表示创建数据库成功。
使用sqldeveloper 进行连接
使用Navicat 连接
第五步、创建表空间
#创建表空间CREATE TABLESPACE yongyou_U8DATAFILE \'/opt/oracle/oradata/ORCLCDB/yongyou_U8.dbf\' SIZE 100MAUTOEXTEND ON NEXT 50M MAXSIZE 1GEXTENT MANAGEMENT LOCALSEGMENT SPACE MANAGEMENT AUTO; 解释说明:1、CREATE TABLESPACE yongyou_U8 创建一个名为 yongyou_U8 的新表空间 表空间是 Oracle 中用于存储数据库对象的逻辑存储单元 2、DATAFILE \'/opt/oracle/oradata/ORCLCDB/yongyou_U8.dbf\' SIZE 100M 指定表空间的数据文件位置和大小 数据文件路径:/opt/oracle/oradata/ORCLCDB/yongyou_U8.dbf 初始大小:100MB(这是 Oracle 容器的标准数据文件路径) 3、AUTOEXTEND ON NEXT 50M MAXSIZE 1G 设置数据文件自动扩展属性 AUTOEXTEND ON:启用自动扩展功能 NEXT 50M:当需要更多空间时,每次自动扩展50MB MAXSIZE 1G:数据文件最大可扩展到1GB 4、EXTENT MANAGEMENT LOCAL 指定区(extent)管理方式为本地管理 本地管理比字典管理更高效,是现代 Oracle 数据库的推荐方式 区是Oracle分配空间的基本单位 5、SEGMENT SPACE MANAGEMENT AUTO 指定段空间管理方式为自动管理 自动管理使用位图而不是空闲列表来跟踪块的使用情况 这提高了空间管理效率,减少了DBA的手动干预
Oracle数据库常用命令:
连接数据库:
方法1:使用操作系统认证 (不需要密码)sqlplus / as sysdba方法2:使用用户名和密码连接sqlplus username/password@hostname:port/servicename username:数据库用户名。password:用户名对应的密码。hostname:Oracle数据库主机名或IP地址。port:数据库监听端口(默认是1521)。servicename:数据库服务名(可以是SID或服务名称)。 查看版本SELECT * FROM v$version;
用户与角色:
用户名 默认密码 用途SYS 安装时设定最高权限用户,拥有数据字典和数据库管理权限,必须用 AS SYSDBA 登录。SYSTEM 安装时设定次高权限用户,用于日常管理(如创建用户、表空间等)。SYSDG 安装时设定用于 Oracle Data Guard 管理。SYSKM 安装时设定用于加密密钥管理(Oracle Key Vault)。SYSBACKUP安装时设定用于 RMAN 备份和恢复操作。SYSRAC 安装时设定用于 Oracle RAC(Real Application Clusters)管理。 显示当前会话登录用户SELECT USER FROM dual;查看所有用户SELECT username, user_id, created, account_status, default_tablespace FROM dba_users;
创建用户:CREATE USER username IDENTIFIED BY password;案例:CREATE USER C##gao IDENTIFIED BY 123456;注意 19C版本之后需要加C##授予权限给用户:GRANT CREATE SESSION, CREATE TABLE TO username;创建角色并授予权限:CREATE ROLE role_name;GRANT SELECT, INSERT ON table_name TO role_name;将创建的角色授予用户,可以使用 GRANT 语句:GRANT role_name TO user_name;删除角色DROP ROLE role_name;删除用户DROP USER user_name CASCADE;锁定/解锁用户:ALTER USER username ACCOUNT LOCK;ALTER USER username ACCOUNT UNLOCK;
表空间:
表空间(Tablespace) 是一个用于存储数据库对象(如表、索引等)的逻辑存储结构。它是数据库文件的容器,将物理文件(如数据文件)映射到数据库对象上,便于数据库管理和数据存储。
SYSTEM:系统表空间,用于存储数据库的核心数据字典、系统对象等。SYSAUX:系统辅助表空间,存储数据库的辅助数据。UNDOTBS1:回滚段表空间,用于存储回滚数据(UNDO信息)。TEMP:临时表空间,通常用于存储排序、合并等临时数据。USERS:用户表空间,通常用于存储用户的表和数据。 数据字典视图查询所有表空间SELECT tablespace_name, status, contents, logging FROM dba_tablespaces;查看所有表空间及其详细信息SELECT * FROM dba_tablespaces;查看当前用户可访问的表空间SELECT * FROM user_tablespaces;
案例:创建表空间CREATE TABLESPACE YONGYOU_U8DATAFILE \'/opt/oracle/oradata/YONGYOU_U8.dbf\' SIZE 500MAUTOEXTEND ON NEXT 50M MAXSIZE 2GEXTENT MANAGEMENT LOCALSEGMENT SPACE MANAGEMENT AUTOLOGGING; 仅删除空表空间(不包含任何对象)DROP TABLESPACE users_data;彻底删除表空间及其所有内容和数据文件(最常用)DROP TABLESPACE YONGYOU_U8 INCLUDING CONTENTS AND DATAFILES;
数据库表:
创建表CREATE TABLE employees ( employee_id NUMBER PRIMARY KEY, first_name VARCHAR2(50), last_name VARCHAR2(50), hire_date DATE); 删除表DROP TABLE employees; 查看表结构DESC user_tablespaces; 重命名表:RENAME old_name TO new_name;
增删改查:
插入数据:INSERT INTO employees (employee_id, first_name, last_name, hire_date) VALUES (1, \'John\', \'Doe\', TO_DATE(\'2021-01-01\', \'YYYY-MM-DD\'));查询数据:SELECT * FROM employees;更新数据:UPDATE employees SET first_name = \'Jane\' WHERE employee_id = 1;删除数据:DELETE FROM employees WHERE employee_id = 1;
视图:
创建视图:CREATE VIEW employee_view ASSELECT employee_id, first_name, last_name FROM employees;删除视图:DROP VIEW view_name;
事务:
BEGIN TRANSACTION:开始一个新的事务。COMMIT:提交事务,所有对数据库的更改将永久保存。ROLLBACK:回滚事务,撤销自上次提交以来的所有更改。
备份还原:
导出数据 (expdp):expdp username/password@db_name dumpfile=export.dmp logfile=export.log schemas=schema_name导入数据 (impdp):impdp username/password@db_name dumpfile=export.dmp logfile=import.log schemas=schema_name