Oracle数据库从入门到精通系列之十八:详细总结Oracle数据库核心知识点
- 一、Oracle数据库核心概念
- 二、Oracle非容器数据库
- 三、Oracle容器数据库
- 四、容器数据库和非容器数据库的区别
- 五、Oracle数据库多租户
- 六、Oracle数据库多租户数据库模型
- 七、Oracle数据库类型
- 八、Oracle数据库创建表和插入数据
- 九、查询当前所在的数据库
- 十、查询当前数据库所有的表
一、Oracle数据库核心概念
-
数据库实例:一个运行在物理服务器上的单个Oracle数据库。一个物理服务器上可以运行多个Oracle数据库实例,每个实例都拥有自己的系统进程和内存结构。
-
数据库:一个由数据表、索引、触发器、存储过程、视图等组成的数据集合。Oracle数据库可以被分成多个逻辑区域,称为表空间(tablespaces),每个表空间包含多个数据文件(data files)。
-
数据字典:Oracle数据库中的元数据信息,记录了数据库对象的定义和属性信息。数据字典由系统表(system tables)和视图(views)组成,可以通过SQL查询来访问数据字典信息。
-
实例配置文件:包含了Oracle数据库实例的配置信息,如内存分配、日志的生成和维护、数据缓存等参数的设置。
-
进程和线程:Oracle数据库实例由多个后台进程和线程组成,负责执行各种系统任务,如监控、维护数据库、管理内存结构,并处理用户请求。
-
数据库用户和授权:Oracle数据库中的用户是授权访问数据库的实体。每个用户拥有自己的登录名和密码,可以访问指定的数据表、视图、存储过程等对象。
-
事务处理:Oracle数据库支持ACID事务(原子性、一致性、隔离性和持久性),确保在数据处理过程中的正确性和一致性。
-
高可用性和容错性:Oracle数据库提供了多种机制来实现高可用性和容错性,如RAC集群、数据保护和复制、备份和恢复等。
二、Oracle非容器数据库
- Oracle数据库非容器数据库是指没有采用多租户数据库模型的Oracle数据库。在非容器数据库中,所有的数据库对象都是在实例级别创建和管理的,不具备多租户和隔离功能。每个数据库对象(例如表空间、表、索引、用户)都是直接在实例级别创建和管理的,所有的数据库对象都是全局可见的。
- 非容器数据库优点是运维管理比较简单,不需要涉及到多个容器和子容器,SQL语句也比较简单,直接针对单个数据库对象进行查询和操作。同时,非容器数据库在资源管理和性能优化方面也具备一定的优势,可以通过单个实例和全局参数进行优化和调整。
- 但是,非容器数据库也存在一些缺点,例如不能提供多租户和隔离功能,也不适合在一个实例中运行多个应用程序,容易导致资源冲突和干扰。同时,非容器数据库在数据库对象管理和版本控制方面也相对比较困难,需要手动进行管理和维护,容易出现数据错误、重复等问题。
三、Oracle容器数据库
- Oracle数据库容器数据库是指采用多租户数据库模型的Oracle数据库。在容器数据库中,一个Oracle数据库主实例作为多个租户的容器,每个租户拥有自己的私有数据库。容器数据库支持多个租户共享同一个物理数据库实例,并且可以保证每个租户之间的数据彻底隔离,从而实现了更好的资源利用和管理灵活性。
- 容器数据库实现需要借助Oracle Container Database(CDB)和Pluggable Database(PDB)的概念和特性。CDB是一个包含多个PDB的容器数据库,每个PDB都是一个独立的数据库实例,但是共享CDB的系统资源和Oracle实例。每个PDB都可以被视为一个租户的私有数据库,它可以被单独管理和配置,而且数据之间是完全隔离的。在容器数据库中,CDB可以被看作是容器数据库的容器,PDB可以被看作是容器数据库的租户。容器数据库可以实现更好的资源利用和管理灵活性,是企业中部署 Oracle 数据库的一种新型架构。
四、容器数据库和非容器数据库的区别
- Oracle数据库的容器数据库和非容器数据库的区别在于它们如何组织和管理各种数据库对象。
- 非容器数据库中,所有的数据库对象都是直接在实例级别创建和管理的
- 容器数据库则引入了多个逻辑容器,每个容器可以包含多个数据库。每个容器都有自己的数据字典、系统表空间和用户表空间,可以独立管理和分配资源。
容器数据库的优点是它可以提供更好的隔离性和多租户功能,支持让多个应用程序在同一个实例中运行,而不会互相干扰。容器数据库还可以提供更灵活的数据库管理和多版本控制功能,使得各个数据库对象之间的依赖关系更加清晰和明确。
然而,在使用容器数据库时,也需要了解一些容器数据库特有的概念和管理方法,例如,需要使用特定的SQL语句来查询容器和子容器中的各种对象,需要使用多个命令来管理和操作各个容器和数据库对象,需要保证所有的容器和子容器都具有足够的系统资源和权限等等。
五、Oracle数据库多租户
- Oracle数据库多租户是指在一个物理数据库实例中,为多个不同的应用程序提供数据存储和管理服务。不同的应用程序被视作不同的租户,每个租户拥有自己的私有数据库,具备完全独立的资源分配、数据库对象管理和数据隔离等特性。在多租户模型中,租户之间的数据是完全隔离的,每个租户可以使用自己的数据库对象和数据,同时也能够共享相同的物理资源,从而降低了企业数据库资源浪费和管理成本。
- Oracle数据库多租户模型使用Pluggable Database(PDB)的概念和特性来实现,每个PDB可以被视为一个租户的私有数据库。PDB在CDB上运行,并且共享CDB的系统资源和Oracle实例。每个PDB可以被单独管理和配置,而且数据之间是完全隔离的。在多租户模型中,CDB可以被看作是容器数据库的容器,PDB可以被看作是容器数据库的租户。Oracle数据库多租户模型可以提升数据库的效率,降低开发和维护成本,是现代化企业数据库应用的首选架构。
六、Oracle数据库多租户数据库模型
Oracle数据库的多租户数据库模型是一种新型的数据库架构,它将一个Oracle数据库主实例作为多个租户的容器,每个租户拥有自己的私有数据库。多租户数据库模型支持多个租户共享同一个物理数据库实例,并且可以保证每个租户之间的数据彻底隔离,从而实现了更好的资源利用和管理灵活性。
在多租户数据库模型中,所有的数据库对象都是在租户级别管理和分配的,比如表空间、表、索引、用户等。每个租户拥有自己的表空间和用户,可以独立管理和分配资源。租户可以根据自己的需求和实际情况,灵活地调整和配置自己的资源。
多租户数据库模型的实现需要借助Oracle Container Database(CDB)和Pluggable Database(PDB)的概念和特性。CDB是一个包含多个PDB的容器数据库,每个PDB都是一个独立的数据库实例,但是共享CDB的系统资源和Oracle实例。每个PDB都可以被视为一个租户的私有数据库,它可以被单独管理和配置,而且数据之间是完全隔离的。在多租户数据库模型中,CDB可以被看作是多租户数据库的容器,PDB可以被看作是多租户数据库的租户。
七、Oracle数据库类型
Oracle数据库支持多种数据类型,包括:
-
数字类型(Number):用于存储数字数据,包括整数、小数等。
-
字符类型(Char、Varchar2、Nchar、Nvarchar2):用于存储字符数据,包括单字节字符和多字节字符。
-
日期类型(Date、Timestamp):用于存储日期和时间数据。
-
布尔类型(Boolean):用于存储逻辑值(True或False)。
-
二进制类型(Raw、Long Raw、Blob、Bfile):用于存储二进制数据,包括图像、音频、视频等。
-
大对象类型(Clob、Bfile):用于存储超大字符数据或二进制数据。
-
几何类型(SDO_GEOMETRY):用于存储空间数据,包括点、线、面等。
-
XML类型(XmlType):用于存储XML文档数据。
除了以上基本的数据类型,Oracle数据库还支持自定义数据类型,可以使用用户定义类型(User-defined types)来创建自定义数据类型。
八、Oracle数据库创建表和插入数据
创建表:
- 创建了一个名为employees的表,包含id、name、department和salary四个字段,其中id是主键
CREATE TABLE employees (id NUMBER(10) PRIMARY KEY,name VARCHAR2(50),department VARCHAR2(50),salary NUMBER(10, 2)
);
插入数据:
- 使用INSERT INTO语句向employees表插入了三条数据,分别对应三个员工的信息
NSERT INTO employees (id, name, department, salary)
VALUES (1, 'John Doe', 'Finance', 5000.00);INSERT INTO employees (id, name, department, salary)
VALUES (2, 'Jane Doe', 'Sales', 6000.00);INSERT INTO employees (id, name, department, salary)
VALUES (3, 'Bob Smith', 'Marketing', 5500.00);
查询数据:
SELECT * FROM employees
九、查询当前所在的数据库
SELECT ora_database_name FROM dual;
ORA12C
十、查询当前数据库所有的表
该命令将返回当前用户所拥有的所有表的表名。
SELECT table_name FROM user_tables;
TB
T
TCHAR
TNUM
如果想查询其他用户下的表,可以使用以下命令:
<owner_name>为要查询的用户的名称。
SELECT table_name FROM all_tables WHERE owner='<owner_name>';
如果想查询数据库中所有的表,不论是哪个用户创建的,可以使用以下命令:
SELECT table_name FROM dba_tables;
需要注意的是,使用dba_tables需要具备DBA权限。如果没有DBA权限,可以使用all_tables查询当前用户所拥有的所有表,或者使用user_tables查询当前用户自己创建的表。