探秘Oracle插接式数据库的实现原理与应用优势 (oracle 插接式数据库)

Oracle是世界上最强大的关系型数据库管理系统之一,它为企业提供了丰富的数据处理工具和高效的数据管理服务。在众多的Oracle数据库产品中,插接式数据库是一种新的完全独立的数据库类型,它是Oracle 12c中引入的一种新特性。Oracle插件式数据库的出现,极大地促进了数据库的多租户管理,为企业级应用提供了更加灵活和高效的解决方案。

本文将,帮助读者了解为什么这种新型数据库成为企业级应用的首选。

实现原理

插接式数据库是在单个Oracle实例中的多个隔离/独立的数据库,每个插接式数据库都有自己的SCN(系统改变号),且可以分配自己的系统资源,因此可以做到一个Oracle实例上包含多个隔离和独立的数据库环境,每个数据库环境有不同的操作系统账户,数据文件和监听端口。

插接式数据库在12c版本中是默认开启的,通过对Oracle实例操作,可以管理插接式数据库。在Oracle 10g和11g版本中,企业用户通过在单个Oracle实例中运行多个数据库,实现数据库的多租户。但多个数据库实例之间会共享一些进程和数据结构,虽然可以分配物理资源,但内存资源是无法隔离的,因此在高并发环境下,这种类型的多租户数据库会面临高并发资源竞争的问题。

而在Oracle 12c版本中,采用了插接式数据库的实现方案,来解决多租户数据库的性能和安全问题。一个Oracle实例中可以包含多个隔离的插接式数据库,每个插接式数据库都是独立的,拥有单独的内存管理和进程管理,这样就能够避免多实例之间的资源竞争问题,提高数据库的性能。

插接式数据库的实现原理主要体现在三个方面:

1. 隔离性:每个插接式数据库都是独立的,拥有自己的用户和系统资源,这样能够实现物理上的资源隔离,不同的用户间访问数据可被有效地分离。

2. 资源分配:每个插接式数据库都有自己的系统资源,包括CPU、内存、磁盘、网络等,能够有效控制资源使用量,避免因为其他数据库导致资源使用不足而影响业务。

3. 数据安全:每个插接式数据库拥有自己的系统管理员,能够对数据库进行更好的管理和维护。同时,插件式数据库的数据文件和元数据都被存储在对应的目录下,极大地降低了数据泄露和攻击的风险,提高了数据的安全性。

应用优势

插接式数据库是Oracle数据库的一种新型数据库,采用了新的实现方式,给企业级应用带来了许多优势。以下是插件式数据库的应用优势:

1. 多租户支持能力:Oracle 插接式数据库允许在一种 Oracle 数据库实例中运行多个彼此隔离的物理数据库。在企业中实现多租户支持是关键,插接式数据库允许多个租户在不同的数据库中使用相同的Oracle实例进行管理,从而大大提高了多租户支持的能力。

2. 管理的简便性:插接式数据库可以在一个单独的Oracle实例中管理多个隔离的和独立的数据库环境,这极大地提高了数据库的可管理性。通过插件式数据库,Oracle可以支持数据库级别的自动化管理,包括配置管理、备份与恢复、性能监测等,有效降低了管理维护成本。

3. 高效的性能:通过Oracle插接式数据库,多个数据库之间能够高效资源隔离,消除了从一个数据库实例到另一个数据库实例进行资源换用的行为,从而提高系统的性能。

4. 可扩展性:Oracle插接式数据库能够支持快速部署,同时,也能够快速地进行组件的切换和文件迁移,增强了数据库的可扩展性和可伸缩性。

5. 安全保护:通过插接式数据库,Oracle 能够在应用和库级别提供单独的安全保护和数据隔离,以增强整个数据库的安全性和灵活性。

随着数字化转型的推进,企业对于数据库系统的需求也越来越高。在众多的数据库产品中,Oracle插接式数据库成为了企业级应用的首选,在多租户场景下更是发挥了重要的作用。通过本文的介绍,了解了Oracle插接式数据库的实现原理和应用优势,相信读者们对这种新型数据库产品已经有了更深入的认识和了解。

相关问题拓展阅读:

详解Oracle数据库中DUAL表的使用

DUAL表的用途

  Dual 是 Oracle中的一个实际存在的表 任何用户均可读取 常用在没有目标表的Select语句块中

  

  

   查看当前连接用户SQL> select user from dual;USER SYSTEM 查看当前日期 时间SQL> select sysdate from dual;SYSDATE SQL> select to_char(sysdate yyyy mm dd hh :mi:ss ) from dual;TO_CHAR(SYSDATE YYYY MM DDHH : : 当作计算器用SQL> select + from dual; + 查看序列值SQL> create sequence aaa increment by start with ;SQL> select aaa nextval from dual;NEXTVAL SQL> select aaa currval from dual;CURRVAL

   关于DUAL表的测试与分析

  DUAL就是个一衡早行一列纯拦侍的表 如果你往里执行insert delete truncate操作 就会导致很多程序出问题 结果也因sql*plus pl/sql dev等工具而异

  

  

   查看DUAL是什么OBJECT DUAL是属于SYS schema的一个表 然后以PUBLIC SYNONYM的方式供其他数据库USER使用 SQL> select owner object_name object_type from dba_objects where object_name like %DUAL% ;OWNER      OBJECT_NAMEOBJECT_TYPE SYSDUALTABLEPUBLIC     DUALSYNONYM 查看表结构 只有一个字段DUMMY 为VARCHAR ( )型SQL> desc dualName TypeNullable Default Comments DUMMY VARCHAR ( ) Y DUAL表的结构 create table SYS DUAL(DUMMY VARCHAR ( ))tablespace SYSTEMpctfree pctused initrans maxtrans storage(initial Knext Kminextents maxextents pctincrease );/*

  很是困惑 ORACLE为什么要用VARCHAR( )型 用CHAR( )难道不好么?从这样的表结构来看 DUAL表设计的目的就是要尽可能的简单 以减少检索的开销

  还有 DUAL表是建立在SYSTEM表空间的 之一是因为DUAL表是SYS这个用户建的 本来默认的表空间就是SYSTEM 第二 把这个可能经常被查询的表和用户表分开来存放 对于系统性能的是有好处的

  有了创建了表 创建了同义词还是不够的 DUAL在SYS这个Schema下面 因此用别的用户登录是无法查询这个表的 因此还需要授权

  grant select on SYS DUAL to PUBLIC with grant option;

  将Select 权限授予公众 接下来看看DUAL表中的数据 事实上 DUAL表中的数据和ORACLE数据库环境有着十分重要的关系(ORACLE不会为此瘫痪 但是不少存储过程以及一些查询将无法被正确执行)

  

  

  */ 查询行数 在创建数据库之后 DUAL表中便已经入了做吵一条记录 个人认为 DUMMY字段的值并没有什么关系 重要的是DUAL表中的记录数SQL> select count(*) from dual;COUNT(*) SQL> select * from dual;DUMMY X 插入数据 再查询记录 只返回一行记录SQL> insert into dual values ( Y ); row created SQL> mit;Commit plete SQL> insert into dual values ( X ); row created SQL> insert into dual values ( Z ); row created SQL> mit;Commit plete SQL> select count(*) from dual;COUNT(*) SQL> select * from dual;DUMMY X/* 假我们插入一条数据 DUAL表不是返回一行 而是多行记录 那会是什么结果呢?SQL> insert into dual values( Y ); 行 已插入SQL> mit;提交完成SQL> select * from dual;DUMMY XYSQL> select sysdate from dual;SYSDATE

  这个时候返回的是两条记录 这样同样会引起问题 在通过使用

  

  select sysdate into v_sysdate from dual;

  来获取时间或者其他信息的存储过程来说 ORACLE会抛出TOO_MANY_ROWS(ORA )异常 因此 需要保证在DUAL表内有且仅有一条记录 当然 也不能把DUAL表的UPDATE INSERT DELETE权限随意释放出去 这样对于系统是很危险的

  

  

  */ 把表截掉SQL> truncate table dual;Table truncated SQL> select count(*) from dual;COUNT(*) SQL> select * from dual;no rows selectedSQL> select sysdate from dual;no rows selected 试着把DUAL表中的数据删除 看看会出现什么结果 SQL> delete from dual; 行 已删除SQL> select * from dual;DUMMY SQL> select sysdate from dual;SYSDATE /*

  我们便取不到系统日期了 因为 sysdate是个函数 作用于每一个数据行 现在没有数据了 自然就不可能取出系统日期 这个对于很多用

  

  select sysdate into v_sysdate from dual;

  这种方式取系统时间以及其他信息的存储过程来说是致命的 因为 Oracle会马上抛出一个NO_DATA_FOUND(ORA )的异常 即使异常被捕获 存储过程也将无法正确完成要求的动作

  

  

  */ 对于DELETE操作来说 ORACLE对DUAL表的操作做了一些内部处理 尽量保证DUAL表中只返回一条记录 当然这写内部操作是不可见的 不管表内有多少记录(没有记录除外) ORACLE对于每次DELETE操作都只删除了一条数据 SQL> select count(*) from dual;COUNT(*) SQL> delete from dual; 行 已删除SQL> mit;提交完成SQL> select count(*) from dual;COUNT(*) /*附: ORACLE关于DUAL表不同寻常特性的解释There is internalized code that makes this happen Code checks that ensurethat a table scan of SYS DUAL only returns one row Svrmgrl behaviour is incorrect but this is now an obsolete product The base issue you should always remember and keep is: DUAL table should always have ROW Dual is a normal table with one dummy column of varchar ( ) This is basically used from several applications as a pseudo table for getting results from a select statement that use functions like sysdate or otherprebuilt or application functions If DUAL has no rows at all some applications (that use DUAL) may fail with NO_DATA_FOUND exception If DUAL has more than row then applications (that use DUAL) may fail with TOO_MANY_ROWS exception So DUAL should ALWAYS have and only row*/

  DUAL表可以执行插入 更新 删除操作 还可以执行drop操作 但是不要去执行drop表的操作 否则会使系统不能用 数据库起不了 会报Database startup crashes with ORA 错误

   如果DUAL表被 不幸 删除后的恢复 用sys用户登陆 创建DUAL表 授予公众SELECT权限(SQL如上述 但不要给UPDATE INSERT DELETE权限)

  向DUAL表插入一条记录(仅此一条) insert into dual values( X );提交修改

  

   用sys用户登陆 SQL> create pfile= d:\pfile bak from spfileSQL> shutdown immediate 在d:\pfile bak文件中最后加入一条 replication_dependency_tracking = FALSE 重新启动数据库 SQL> startup pfile= d:\pfile bak SQL> create table sys DUAL ( DUMMY varchar ( ) )pctfree pctused ;SQL> insert into dual values( X );SQL> mit;SQL> Grant select on dual to Public;

  授权成功

oracle 插接式数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于oracle 插接式数据库,探秘Oracle插接式数据库的实现原理与应用优势,详解Oracle数据库中DUAL表的使用的信息别忘了在本站进行查找喔。


数据运维技术 » 探秘Oracle插接式数据库的实现原理与应用优势 (oracle 插接式数据库)