Oracle 12c数据库应用与开发

978-7-115-47530-5
作者: 杜献峰
译者:
编辑: 赵轩
分类: Oracle

图书目录:

详情

Oracle 12c的基本知识、系统性能和特点,以及如何支持云计算;Oracle 12c的系统结构,重点阐述了CDB和PDB的概念、两者的关系、以及如何创建CDB和PDB;运行Oracle 12c所需要的服务、这些服务的作用以及如何启动和配置,对SQL PLUS语言进行了较为详细的阐述;PLSQL编程;数据库的表空间、概要、用户、角色,以及如何创建和使用这4个对象等

图书摘要

编  著 杜献峰

责任编辑 赵 轩

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315


本书全面、系统、深入地讲解了Oracle 12c数据库原理、应用和开发,也讲解了Oracle 12c常用的管理知识,以Oracle 12c数据库云计算为线索,详细讲解了CDB和PDB。

本书共分16章。第1章介绍了Oracle 12c的基本知识、系统性能和特点,以及如何支持云计算;第2章介绍了Oracle 12c的系统结构,重点阐述了CDB和PDB的概念、两者的关系以及如何创建CDB和PDB;第3章介绍了运行Oracle 12c所需要的服务、这些服务的作用,以及如何启动和配置,并对SQL PLUS语言进行了较为详细的阐述;第4章介绍了PL/SQL编程;第5章介绍了数据库的表空间、概要、用户、角色,以及如何创建和使用这四个对象;第6章对Oracle 12c支持的常用类型的数据表,以及如何对这些表做修改操作进行了详细介绍;第7章介绍了数据查询;第8章介绍了对表的DML操作,如何对表进行Insert、Delete、Update和Merge操作;第9章介绍了视图和物化视图作用、创建、修改和解析,以及物化视图日志;第10章介绍了数据库对象的索引、聚簇、序列,以及如何创建和使用这些数据库对象;第11章介绍了数据库对象,即包、包体、过程、函数,并分别阐述了如何创建和使用这些数据库对象;第12章介绍了数据库对象,即触发器、游标以及静态/动态PL SQL,触发器和游标这两个数据库对象在编程中应用广泛,因此本章给出了较多的应用实例;第13章介绍了数据库安全;第14章介绍了事务和并发控制;第15章介绍了RMAN技术及应用,并给出一些有代表性的实例;第16章介绍了闪回技术。

本书适合计算机科学与技术专业、软件工程专业、网络工程专业、信息安全专业学生阅读,也可作为IT技术人员的参考书。


当今,云计算和大数据是信息技术领域的两大热点,云计算应用的重点是让每个节点计算能力最大化,重在技术;而大数据是从大量数据中获取有价值的信息,重在数据的效用最大化。

Oracle是数据库领域优秀的数据库软件,Oracle数据库软件用户多,市场占有率高。在许多行业,Oracle是用户的数据库首选产品。

为了适应云计算和大数据的新技术潮流和趋势,Oracle公司于2013年将数据库从Oracle 11g升级到Oracle 12c,这里的c就是cloud(云)的缩写,Oracle 12c是基于云计算的、具有高可用性、功能强大的数据库产品。该软件一经面世就受到IT界的追捧。为了支持云计算,与以前版本相比,Oracle 12c在系统结构方面进行了彻底改变,Oracle 12c是一款高度集成的云计算平台,为企业数据存储和计算提供了高性能的数据库服务器。

本书以Oracle的最新版本Oracle 12c为例,系统地讲述了Oracle 12c数据库的概念、管理和应用开发等内容。全书结构合理,内容翔实,示例丰富,语言简洁。

本书对于Oracle 12c管理员和应用程序开发者,也有很好的学习和参考价值。该书不仅适合作为高等院校本/专科计算机软件、信息系统、电子商务等相关专业的Oracle数据库课程教材,还适合作为各种数据库技术培训班的教材以及数据库开发人员的参考资料。

作者在中原工学院计算机学院从事数据库教学和科研近20年,在Oracle 12c发布之前,作者在数据库课程教学和工程项目开发中使用的Oracle版本有Oracle 9i、Oracle 10g、Oracle 11g。2013年Oracle 12c发布之后,作者将Oracle 12c应用于数据库课程教学和项目开发,通过实际应用感觉到Oracle 12c比以前的版本功能更强大,使用更方便。

本书是作者多年理论研究、教学实践、项目实战的精华总结。本书选择的演示数据库是大家都熟悉的学生选课数据库,这与王珊、萨师煊老师编写的《数据库系统概论 (第四版)》教材保持一致,因为国内计算机及相关专业的数据库课程一般都选用该教材,使用上述数据库便于读者阅读。

本书特色

读者对象

有一定数据库基础的大学计算机及相关专业的老师、大学生,以及IT公司软件开发技术人员。

本书约定

对象名 CDB PDB
Database Name demo pdborcl
User Name/PWD sys/Oracle12c turing/Oracle12c
Permanent Tablespace Name pdb_ts_test
DataFile pdb_ts_data
Temporary Tablespace Name pdb_ts_temp
TempFile pdb_ts_temp_data

 

   Course(CNo,CName,CCredit,CPNO),

SC(SNo,CNo,Grade),

本书在组织上,力求贴近应用,更多地使用实例,注意操作细节,拉近与读者的距离。

由于时间所限,书中难免存在不足之处,敬请读者批评指正,作者会虚心接受并表示谢意。

致谢

本书得到中原工学院学术专著出版基金资助。感谢中原工学院电子档案研究所的同志在本书的成稿过程中给予的支持与帮助。感谢中原工学院计算机学院的领导和同事们。感谢数据库课程组的同事们给予的大力支持与帮助。感谢中原工学院科技处对本书出版提供的帮助。

素材下载

本书相关的数据与脚本,请从异步社区中本书页面下载(www.epubit.com.cn)。

作者联系方式

电子信箱:5229@zut.edu.cn。


1.1 大数据与云计算

1.2 Oracle 12c 支持云计算

1.3 Oracle 12c 体系结构

1.4 安装Oracle 12c

大数据、云计算是当前的热词,也是技术热点。大数据是由基本的数据组成,而数据(Data)是人们对自然界中的特定信息加工和处理后得到的结果。计算机中的数据是人们对自然界中的信息或者问题进行抽象、加工并映射到信息世界后得到的结果,并使之在图灵机中能够进行处理。

社会进步和科技的快速发展,特别是软硬件和网络技术的广泛应用,使得人们生产、生活和工作要使用大量的数据,使用数据的同时也会生成新的数据,计算机网络中每天都会产生大量的数据,因此人们常说“现在是信息大爆炸时代”。

图灵机中任意两个数据或文件,按照数据类型或文件类型来划分可分为两种:同构(质)数据(Homogeneous Data)和异构(质)数据(Heterogeneous Data)。对数据的处理由以文件处理阶段发展到数据库阶段,并在数据库阶段得到了前所未有的大发展,数据以数据库的形式保存和处理得到广泛的认可,人们也把数据库称为数据仓库,其主要原因是数据库中的数据具有严格的同质性,即数据库中的数据都是结构化数据,因此,人们操作和处理这些数据时就变得非常容易。一个数据库运行的时间越长,数据库中的数据就变得越多,当数据库中数据达到一定的量级时,例如,单个表中的数据达到千万行或者更多,数据量达到TB、PE、EB,数据就达到海量级别。

关于大数据业界还没有一个确切和统一的概念,不同组织和专家对大数据的定义可能不同,但人们普遍认为大数据具有以下特性。

大数据的数据类型

大数据的一个突出特点是数据具有异构性,如果按结构化来划分,大数据的数据类型可分为结构化数据、非结构化数据和半结构化数据。

大数据是从大量数据中获取有价值的信息,重在数据的效用最大化。

大数据的处理系统

大数据的处理系统主要以Google的Hadoop为代表,Hadoop包括3项关键技术:分布式文件系统(HDFS)、MapReduce编程模式(或Spark)和分布式数据库HBase以及其他相关软件。

计算机,顾名思义就是用于完成计算任务的机器,从其诞生之日起就是帮助人们实现对问题的求解。随着计算机网络的发展,数据量急剧增加,计算任务和计算量越来越大,因此就出现了网格计算(Grid Computing)和云计算(Cloud Computing)。不论是网格计算还是者云计算,都是基于网络的计算。Oracle公司顺应计算技术发展使Oracle 12c支持云计算。

云计算的定义有很多,美国国家标准和技术研究所(NIST)给出的定义是:云计算是一种能够通过网络以便利的、按需付费的方式获取计算资源(包括网络、服务器、存储、应用和服务等)并提高其可用性的模式,这些资源来自一个共享的、可配置的资源池,并能够以最省力和无人干预的方式获取和释放。这种模式具有5个关键功能、3种服务模式和4种部署方式。

云计算的5个关键功能分别是:按需自助服务(On Demand Self-Service);广泛的网络访问(Broad Network Access)能力;动态的资源池(Resource Pooling);快速弹性(Rapid Elasticity);可计量的服务(Measured Service)。

3种服务模式分别是:SaaS(Software as a Service,软件即服务)、PaaS(Paltform as a Service,平台即服务)和IaaS(Infrastructure as a Service,基础设施即服务)。

4种部署方式分别是:公有云、私有云、混合云和社区云。

从以上的阐述可知,云计算和大数据这两个概念既有联系又有区别,因为这两个概念阐述的是一个问题的两个不同的方面。云计算重点解决的是计算技术问题,使单个节点的计算能力最大化;而大数据重点关注数据的价值,希望使数据的价值达到最大化。相对于计算过程而言,大数据更注重数据的效用。

云计算是让位于云端的每个节点计算能力最大化、重在计算技术的应用。

目前,我们国家已经建立了很多的大数据中心和云计算平台,有国家层面的,也有地方政府和企业层面的,这都标志着大数据和云计算在我国正得到广泛的应用。

Oracle 12c是Oracle公司于2013年6月发布的最新版的数据库软件。在Oracle 12c之前,发布的有Oracle 9i、Oracle 10g、Oracle 11g。Oracle 9i中的i是英文单词Internet的第一个字母,表示对Internet计算技术的支持,Oracle 10g中的g是英文单词grid的第一个字母,表示对grid计算技术的支持,即对网格计算技术的支持,Oracle 12c中的c是英文单词cloud的第一个字母,表示对云计算技术的支持。无论是基于Internet计算、基于grid计算还是基于cloud计算都反映出Oracle数据库对当时最新技术的支持。

目前,很多IT组织在云计算方面的研究已经取得可喜的成就,这并不奇怪,因为云计算在为IT组织提供适应商业需求的同时,也降低了IT的复杂度及成本,事实上,Oracle 12c使用的云计算技术,在版本标准化、数据库服务及自动化方面都给用户提供了极大的便利。其云计算新技术包括以下两个方面。

ORAC(Oracle Real Application Cluster,Oracle真正应用集群)支持跨数据库服务器池的透明配置;提供硬件故障或有计划停机的容错能力。从支持网格计算的Oracle 11g发展到对云计算提供支持的Oracle 12c是顺理成章的事,在OLTP(Online Transaction Processing,网上交易处理)和数据仓库应用方面提供可靠性保证。

OASM(Oracle Automatic Storage Management,Oracle自动存储管理)对于Oracle数据库文件提供了文件系统和卷管理功能,简化了统一存储及数据库云管理,对分布式I/O以及对磁盘故障的自动镜像重构和再同步的检测都具有全新的再平衡能力。

对数据中心的可移动部件进行标准化,这有助于将不同数据库统一为一体,并且这种数据库的统一是云计算的关键一步,进行云计算的目的就是为了更为有效地使用硬件和管理资源。在云计算中要使不同的数据库高度统一为一体,同时又不会使开发者和管理者的成本增加,对于IT界进行云计算的人们是极大的挑战。很多公司都已经使服务器可视化、在一台服务器上运行几个Oracle实例、或者通过模式(Schema)统一对Oracle数据库进行整合,这些方法中的每种方法都有限制,或者导致成本增加和复杂性变大。

全新的多租户体系结构:Oracle 12c多租户体系结构是针对云计算而设计的,这种全新的结构简化了不同数据库之间的统一,并使其成为高密度的统一,但是,并不需要修改现有应用模式。Oracle 12c企业版有一个选项就是可以将很多数据库作为一个数据库进行管理,这并不会破坏单个数据库的隔离性和资源控制。在这种全新的体系结构中,多租户容器中的单一数据库可作为很多“可插接”数据库的宿主机,将多个数据库统一到一个数据库或者将一个数据库插入到多租户容器中,对于一个应用程序来讲,这样的操作与现有的Oracle数据库是一样的。对可插接数据库的访问与现有的Oracle数据库访问是相同的,在统一这些数据库过程中,管理员对资源有优先控制权。

虽然OLTP应用对于商业事务处理是必需的,数据仓库应用对于商业性能度量也是必要的,但是用户更注重是否能随时安全访问数据仓库并得到快速的响应。Oracle不仅是当今最流行的OLTP应用的数据库软件,也领导着数据仓库市场的潮流。Oracle 12c具有行业领先的性能和对数据全面的分析能力,数据集成在一个单一的平台扩展起来比较容易,能够满足大多数应用需求,它完全支持广泛的商务智能(Business Intelligence),其优化措施包括:高级索引操作、OLTP聚合、带*的查询自动转换、分区剪枝和并行数据库操作。

DW(Data Warehouse,数据仓库)的应用已经得到大家的广泛认可,由于技术的成熟,很多公司认识到将数据仓库中带有附加值的数据融合到多数据源中进行知识开采是非常必要的,这个过程远远超出了其原有的事务处理系统。对于由设备产生的数据和媒体产生的大数据能够提供对商务机遇并提供新的契机,尽管像Hadoop和分布式关键值存储(例如Oracle NoSQL数据库)技术能够帮助IT公司获得大体积低密度数据,但是只有对传统的企业数据进行分析后,才能够实现大数据真正的价值。

集成大数据:对大数据操作需要一个结构,利用该结构很容易从多数据源中获得数据、并能够将其转变为适合于分析的格式,这样才能够有效地得到商务决策。为了对大数据进行有效的分析,Oracle 12c提供了全方位的集成工具来帮助客户从多数据源获得数据,这些集成化工具包括:ODI(Oracle Data Integrator),它是高性能批量数据移动和转化的结构,该工具用于从异构数据源中将数据装载到Oracle 12c中;OBDC(Oracle Big Data Connectors),该工具可以将大数据环境与Oracle 12c进行紧密的集成,其有以下4个关键组件组成。

Oracle 12c和Oracle Enterprise Manager Cloud Control建立在先前版本的自动和自管理能力基础之上,帮助节省数据库管理员的时间和有效地满足用户的需求,Oracle Enterprise Manager Cloud Control满足了数据库服务云的要求,也满足了Oracle 12c技术多租户和数据编辑。

数据库作为一种服务,Oracle Enterprise Manager Cloud Control为用户提供了一种直观的界面,在该界面中,从数据库配置到性能的提高、问题诊断到提高、打补丁及对数据库服务的度量,所有这些管理任务都被进行了简化并实现了自动化,它与自助服务一起打包,开发人员、测试人员、管理员和其他的自助服务用户可以登录、创建数据库实例和数据库簇,或者执行基本的数据库管理操作。虽然Oracle 12c提供了一种全新的系统结构来简化整合数据库云, 并且Oracle Enterprise Manager Cloud Control提供的工具可以在成本范围内管理用户服务,但是如果对其进行了修改可能会带来风险。

减少对云操作的风险

过渡到云不可避免地要改变数据中心,传统的软件测试依赖于开发脚本、人工测试操作或者使用第三方工具,测试时有一定的测试环境,但是当软件离开了IT公司的测试环境就暴露出一定的风险和故障。Oracle Real Application Testing是Oracle 12c系统的测试软件,使用该产品可以使数据库管理员的工作量大大减少。当数据库发生改变(例如Oracle 12c的更新)、配置改变(例如由单服务器变为簇服务器)和系统改变(例如更新操作系统)时,使用该软件进行严格测试是非常合适的,Oracle Real Application Testing使数据库管理员很容易获得和重演该卷、并发和混合负载下的吞吐量,也提供了并发测试和可移植捕获信息的能力。当将数据库整合到云中时,这一点很重要。

Oracle 12c属于容器数据库(Container Database,CDB),顾名思义,容器数据库就是由多个位于不同地理位置的同构或者异构的数据库构成,由Oracle 12c将这些数据库整合 (Consolidate)在一起进行管理,将这些数据库统一到同一个数据库中,就如同将物品放置到一个容器里一样,可以随时向该容器里放置物品或者从中取出物品,对于Oracle 12c来讲,不论是同构数据库或者异构数据库都可以放到Oracle 12c这个“容器”里,将新的数据库插接(Plug)到Oracle 12c这个“容器”里必须先将其整合到该容器里,能够插接到Oracle 12c中的数据库称为可插接式数据库(Pluggable Database,PDB),有的书上称为可插接式数据库。

CDB和PDB是Oracle Database 12c的两个重要组件。Oracle引入PDB以后,如同从底层硬件中将操作系统抽象出来一样,PDB就是从管理系统中将数据库抽象出来。使用CDB和PDB技术可以加速数据库部署,通过对CDB升级或者给CDB打补丁就可以将CDB所有更新与PDB保持同步。也可以新创建一个CDB后进行升级更新,再将其他的PDB插入该CDB中,可以达到相同的效果。在Oracle 12c中,两个PDB之间的安全性级别同两个单一的Oracle数据库的安全性级别相同。在Oracle 12c之前的版本没有容器数据库的概念,在Oracle 12c中引入CDB的概念简化了数据库管理员对多个数据库操作,使得容器数据库管理员可以同时对该容器中的所有数据库进行操作,每一个可插接式数据库DBA可以对其可插接式数据库进行管理,Oracle 12c之前的版本操作数据库必须先创建一个数据库实例。在Oracle 12c中,数据库管理员要操作CDB中的这些数据库只要创建一个CDB实例即可。由于这些数据库都属于同一个CDB管理,因此通过CDB实例就可完成对这些数据库的操作,从而大大简化了操作。

CDB、PDB以及CDB实例之间的关系如图1-1所示。在该图中,容器数据库CDB1中有3个可插接式数据库,即PDB_A、PDB_B、PDB_C,这样在操作系统下就有4个数据库文件,即PDB_A、PDB_B、PDB_C和CDB1,CDB1文件中记录了3个可插接数据库的信息,即PDB_A、PDB_B和PDB_C,可插接数据库PDB_A、PDB_B和PDB_C自身没有对应的实例。当创建了CDB的一个实例CDB1后,PDB_A、PDB_B、PDB_C共用一个实例CDB1,PDB_A、PDB_B和PDB_C共享CDB的控制文件、日志文件和UNDO表空间。对于非容器数据库用户,应用程序可以通过服务名或者实例名连接到Oracle 12c数据库服务器,对于容器数据库用户应用程序同样可以通过服务名或者实例名连接到Oracle 12c数据库服务器,而对于可插接数据库用户应用程序只能通过服务名连接到Oracle 12c数据库服务器,对于使用Oracle 12c进行应用程序开发人员,这一点非常重要。以上就是Oracle 12c多租户(Multitenant)思想。

图1-1 CDB和PDB结构

在Oracle 12c之前的版本中,实例与数据库是一对一或多对一关系:即一个实例只能与一个数据库相关联,或者多个实例加载到一个数据库中,实例与数据库不能是一对多的关系,对于Oracle 12c,实例与数据库可以是一对多的关系,这个实例对应图1-1中的CDB1,多个PDB数据库对应图1-1中的PDB_A、PDB_B和PDB_C。

在Oracle 12c的基础体系结构中含有1个CDB。在CDB中可包含0个、1个或者多个PDB、1个根容器(Root Container)和1个种子PDB(Seed PDB)。

用户可以创建一个或者多个PDB,也可以不创建PDB,Oracle 12c要求一个CDB最多可以包含250个PDB。一个PDB是由可移植的模式(Schema)、模式对象和非模式对象组成的集合,这些对象组成的集合是以Oracle Net客户端(非CDB)的形式展现。PDB是用户创建的包含数据和代码的一个数据库实体,用户可以基于其具体需求创建PDB。

根容器中保存了Oracle 12c提供的元数据和公共用户信息,例如Oracle 12c提供的PL/SQL包就是元数据,公共用户是容器数据库中的每一个数据库用户都可看到的一个用户。用户可以通过命令“SQL>show con_name”查看根容器名,Oracle 12c将根容器命名为CDB$ROOT。

公共用户与现有的PDB和未来的PDB都具有相同的根(Root)和ID,公共用户不仅在根中记录有日志,而且在操作的PDB中也记录有日志。公共用户能够执行的操作依赖于授予给它的权限,一些管理任务(例如创建PDB或者拔出PDB)必须由公共用户完成。CDB也支持本地用户,一个本地用户就是PDB一个实实在在的用户。

种子PDB是Oracle 12c提供的一个系统模板,CDB利用该模板来创建新的PDB,用户可以通过命令“SQL>SELECT con_id,dbid,name,open_mode FROM v$pdbs;”查看种子PDB的名字,Oracle 12c将种子PDB命名为PDB$SEED,用户不能对种子数据库进行修改,也不能增加新的种子数据库。

CDB和PDB的关系示意如图1-2所示。

图1-2 CDB和PDB的关系

Oracle 12c的基础体系结构中的每一个组件都被称为一个容器。因此,根是一个容器,种子是一个容器,每个PDB也都是一个容器,因此,一个CDB结构中包含多个容器,分别是root、seed PDB和用户PDB容器。图1-3给出了Oracle 12c的基础体系结构,该结构图中包含了4个容器,分别是root、seed PDB、app1_pdb和app2_pdb。app1_pdb和app2_pdb的数据是用户的业务数据。从逻辑上看图1-3是一个整体,但文件的存放位置等物理结构是不同的。每个容器在CDB中都有唯一的ID和名称,PDB唯一的ID主要用于产生存储PDB文件的目录名,包括Oracle Managed Files目录和non-Oracle Managed Files目录。

图1-3 Oracle 12c的基础体系结构

用户可以很容易将PDB插入CDB或者从CDB中拔出PDB,当将一个PDB插入CDB后,就实现了PDB与CDB的关联。PDB文件信息和拔出PDB的信息写在XML文件中(例如数据文件和钱夹子文件)。

用户可以将一个PDB从其所属的CDB中拔出,将其插入另一个CDB中,而这样不会改变用户的模式和应用,但是一个PDB在某一时间只能插入一个CDB中。

当然,一个PDB数据库在某一时刻只能插入一个CDB,而不能插入多个CDB数据库,每一个PDB数据库都有其全局唯一标识ID,该ID用于区别同一个CDB中不同的PDB数据库。

Oracle 12c是64位的软件,因此,要求安装的Windows也必须是64位操作系统。首先从Oracle公司网站上下载Oracle 12c,官网提供的Oracle 12c安装程序由两个压缩文件组成,将这两个压缩文件下载到同一文件夹下,然后再将这两个压缩文件解压缩到同一个文件夹下,此时在安装文件夹下有install、response和stage三个文件夹及一个setup.exe文件。用户直接双击setup.exe安装文件就可以安装了。这里以64位的Windows 7操作系统为例进行安装阐述,安装Oracle 12c企业版要求内存为2G,安装后占磁盘空间7G,不过在安装之前还需要做以下操作系统设置。

❶ 使服务器处于联网状态,关闭所有的防火墙和杀毒软件。

❷ 按以下步骤启动SERVER服务:【控制面板】→【所有控制面板项】→【管理工具】→服务→【启动SERVER】。

❸ 按以下步骤进行设置:【控制面板】→【所有控制面板项】→【管理工具】→【计算机管理】→【系统工具】→【共享文件夹】→【共享】,右键单击【共享】→【新建共享】,点击【下一步】→单击【浏览】→选择【本地磁盘(C:)】→【确定】,点击【下一步】→在【共享名】中输入【C$】→
【下一步】,对权限进行相应的选择(一定选择第二项或第三项)。单击【完成】。这样就可以安装了。

❶ 双击“setup.exe”,安装程序会自动加载并检查系统是否达到了数据库安装的最低配置,如果达到要求,就会直接加载程序进行下一步的安装并出现如图1-4所示的安装窗体。

图1-4 安装窗口1

❷ “配置安全更新”窗口如图1-5所示,在该窗口中取消勾选【我希望通过My Oracle Support接受安全更新】,单击【下一步】。

图1-5 安装窗口2

❸ 出现如图1-6所示的“软件更新”窗口后,选择【跳过软件更新】,点击【下一步】。

图1-6 安装窗口3

❹ 【安装选项】窗口如图1-7所示,选择【创建和配置数据库】,单击【下一步】。

图1-7 安装窗口4

❺ 出现如图1-8所示的“系统类”选项时,有【桌面类】和【服务器类】两个选项,选择【服务器类】可以进行高级的配置,这里选择【桌面类】,单击【下一步】。

图1-8 安装窗口5

❻ 安装程序出现“Oracle主目录用户选择”,如图1-9所示,这一步是以前Oracle版本没有的,其作用是为了更安全地管理用户的数据库,主要是防止登录Windows 7系统误删除了Oracle文件,这里选择第二个选项【创建新Windows用户】,输入用户名和口令,单击【下一步】。

图1-9 安装窗口6

❼ 在“典型安装”窗口中如图1-10所示。选择【Oracle的基目录】、【软件位置】、【数据库文件位置】,数据库版本选择【企业版】,字符集选【默认值】,全局数据库名定义为demo,并输入密码为Oracle12c,勾选【创建为容器数据库】,同时创建一个PDB,PDB的名字为pdborcl,单击【下一步】。这样就指定了要创建一个CDB和一个PDB的操作。

图1-10 安装窗口7

Oracle 12c安全要求比较高,要求密码必须是小写字母、数字和大写字母的组合,字符串长度也必须满足Oracle 12c的要求。

❽ 在上一步设置好后,将执行“先决条件检查”窗口,如图1-11所示,单击【下一步】。

图1-11 安装窗口8

❾ 如果上一步检查没有问题,安装程序会自动生成安装“概要”信息窗体,如图1-12所示。用户可以单击【保存相应文件】按钮将安装概要信息保持到本地磁盘上。确认无误后,可单击【安装】按钮,数据库根据这些配置信息进行安装。

图1-12 安装窗口9

❿ 进入“安装产品”窗口如图1-13所示。安装过程需要数十分钟的时间,安装期间不要关闭程序。

图1-13 安装窗口10

⓫ 安装到创建数据库时,就进入“Database Configuration Assistant”窗体,如图1-14所示,创建数据库时间会更长,需耐心等待。

图1-14 安装窗口11

⓬ 数据库安装成功后,安装程序会弹出如图1-15所示的窗口。单击【口令管理】按钮进入口令管理,可查看并修改以下用户。普通管理员:system(密码:Oracle12c);超级管理员:sys(密码:Oracle12c)。修改完成后,单击【确定】。这里的口令也要符合Oracle口令设置规范,为了便于阅读,这里将密码都设置为Oracle12c,实际工作中要分别进行设置,并设置得复杂些。

图1-15 安装窗口12

用户安装完成后,Oracle 12c默认的服务都是自动启动状态,重新启动计算机就可以使用自己的Oracle 12c服务器了。用户可以在浏览器的URL栏中输入域名https://localhost:5500/em,用户就可以打开Oracle 12c的企业管理器,在打开的页面中输入用户名和密码后就可进入企业管理器。


2.1 多租户环境下用户的操作及工具

2.2 创建CDB 数据库

2.3 操作CDB 数据库

2.4 创建PDB 数据库

2.5 打开与关闭PDB 数据库

2.6 建立演示数据库

2.7 操作演示数据库

图2-1 新创建的CDB结构

由于在Oracle 12c数据库服务器中一般只有一个CDB数据库,这个数据库中有多个PDB,每个PDB有其相应的用户对其进行操作,因此每个用户通过操作一个应用程序实现对PDB中的数据对象操作,如图2.2所示。Oracle 12c数据库服务器放在世界任何可以连接Internet的地方,这个CDB数据库中有三个PDB数据库,有三个应用(“某学校教学管理” “某公司生产管理”“某医院医疗管理”)对应这三个PDB。这三个应用属于不同应用领域的三个单位所有。假设三个PDB数据库名分别叫PDB1、PDB2和PDB3,三个PDB数据库分别由用户Turing、Smith和Tom进行管理。在CDB数据库已经启动的情况下,当一个用户要操作数据库时,首先要建立一个PDB数据库例程,假设用户Smith在欧洲先操作数据库,Smith就需要先建立一个PDB1数据库例程,然后装载数据库和打开数据库,建立会话session A。用户Smith操作数据库要求数据库参数必须满足其要求,例如时区、货币(单位符号是€)等,假设Smith在创建例程时按其在欧洲的要求定义了这些参数,这样用户Smith就可以操作数据库中“某公司生产管理”应用中的数据表及其他的数据库对象。假设在中国的用户Turing要操作PDB2数据库,其操作的是“某学校教学管理”应用中的表和其他的数据库对象,由于CDB例程已经启动,因此,用户Turing建立PDB2数据库例程、装载PDB2数据库和打开PDB2数据库前就不需要再建立CDB例程了,直接建立会话session B即可,但是用户Turing在中国操作数据库时的参数要符合中国的习惯,例如时区、货币(单位符号是¥)等。这些参数由用户Turing在创建数据库例程时按习惯定义,用户Turing可以在自己的会话session B中设置这些参数值,使其满足我们的习惯和要求。

该例子说明用户在更改数据库初始化参数时,可以按要求更改PDB例程参数,也可以按要求更改会话参数。

从该例子中可以看出,虽然在CDB中有三个PDB数据库,但是这三个PDB数据库PDB1、PDB2和PDB3之间边界非常明确,就是通过PDB数据库名进行界定,不同的数据库用户只能连接到自己对应的PDB数据库。

当然,用户也可以将图2-2中的三个应用放在一个PDB数据库中进行管理,那么,三个应用的边界仍然可以做到非常明确,就是通过表空间进行界定。这是Oracle 12c之前版本的数据库模式,与Oracle 12c要求的数据库云计算不相适应,用户在Oracle 12c中不要使用这种模式。

图2-2 多个租户操作PDB数据库

本书阐述语法过程中,对命令中的语法约定见表2-1所列。

表2-1  命令中的语法约定

符号

示例

说明

竖线

|

分隔可选的语法参数

中括号

[ON|OFF]

中括号里的是可选参数,可选择一个或者多个参数,如果选择了参数,不要输入中括号和竖线

大括号

{ON|OFF}

必须选择一个参数,不能选择多个参数,如果选择了一个参数,不要输入大括号和竖线

下划线

{ON|OFF}

默认值,如果用户没有输入值,就使用下划线标出的值

省略号

n

前面的项可被重复多次

用户可以使用以下工具完成多租户环境的操作任务。

创建多租户CDB的过程与创建非CDB类似,用户不能用OUI(Oracle Universal Installer)创建CDB,可以在CDB或者非CDB的主机上创建一个新的CDB。创建CDB有两种具体方法:使用图形化工具DBCA(Database Configuration Assistant)创建CDB。使用CREATE DATABASE SQL语句创建。创建CDB需要准备几个与CDB一起工作的操作系统文件。

CDB的配置:在创建CDB前,先要决定如何配置CDB,还需要经过细心研究和周密计划,表2-2列出了创建CDB的计划。

表2-2  创建CDB计划及对CDB的影响

操作计划

对CDB的影响

计划创建PDB的数据表和索引并估计需要的空间大小

在CDB中,大多数用户的数据在PDB里,Root中是非用户数据和用户最小化的数据,对PDB做的计划安排也是CDB计划的一部分,CDB的磁盘需求空间是安装Oracle数据库的空间加上所有的PDB占的空间之和。一个CDB可以有包括Seed在內253个PDB

计划安排CDB调用的底层操作系统文件

Root、Seed和每一个PDB都有一些数据文件。对于单实例CDB有一个重做日志(Redo Log)文件,或者Oracle RAC的每一个实例有一个重做日志文件,对于Oracle RAC所有的数据文件和重做日志文件必须是共享存储

计划CDB所需要的后台进程数

一组由Root和所有PDB共享的后台进程

选择全局数据库名,该数据库名是网络中使用的名字和CDB位置,通过设置DB_NAME和DB_DOMAIN初始化参数创建全局数据库的Root名

Root的全局数据库名就是CDB的全局数据库名。通过PDB名和DB_DOMAIN初始化参数定义PDB的全局数据库名

对于初始化参数文件中的参数要熟悉,对SPFILE概念和操作熟悉

CDB调用一个SPFILE或者一个文本文件PFILE,Root的初始化参数值可从PDB继承,通过ALTER SYSTEM可对PDB设置初始化参数。当操作SPFILE时,Root必须是当前容器,创建或者修改SPFILE的用户必须是具有SYSDBA、SYSOPER或者SYSBACKUP管理权限的用户,并且该用户必须行使AS SYSDBA、AS SYSOPER或者AS SYSBACKUP的连接权限。要创建一个CDB,初始化参数ENABLE_PLUGGABLE_DATABASE必须设置为TRUE

选择字符集

CDB中的所有PDB都使用该字符集,当选择CDB数据库字符集时,一定要选当前CDB的数据库字符集

要考虑CDB支持的是哪一个时区

为整个CDB(包括所有的PDB)设置时区,也可为每一个PDB单独设置时区

选择数据库block的大小,在创建CDB时通过初始化参数DB_BLOCK_SIZE设置完成,在CDB创建完成后不能修改Block

Block的值将应用于整个CDB

如果用4KB字节的扇区存储联机重做日志文件,那么就要指定重做日志的Block的大小,并制定一个备份和恢复策略来保护CDB

CDB有一个重做日志文件和一个控制文件

选择SYSAUX表空间初始值大小

Root和每一个PDB有一个SYSAUX表空间

对于要使用缺省表空间的非SYSTEM用户防止因疏忽而忘记存储SYSTEM表空间的数据库对象

可以为Root和每一个PDB定义一个缺省的表空间,当然,Root和每一个PDB的表空间为SYSTEM

计划使用一个或者更多的缺省临时表空间

整个CDB有缺省的临时表空间,对于单个的PDB,可创建一个临时表空间

计划使用一个撤销(Undo)表空间管理撤销数据

单实例的CDB有一个活动的撤销表空间,在一个Oracle RAC CDB中每一个实例有一个活动的撤销表空间,只有适当的权限以及其当前容器是根的普通用户才可以创建撤销表空间。当容器是根时,在静态数据字典视图和动态性能视图中撤销表空间是可见的;当容器是一个PDB时,仅在动态性能视图中撤销表空间才是可见的。当容器是一个PDB时,Oracle 12c数据库会忽略撤销表空间和回滚段操作

为了满足应用需求计划数据库服务

Root和每一个PDB可能要求几个服务,可以为Root和单个的PDB创建服务,所以要确保打开的服务数量不要超过数据库服务的限制。数据库服务有一个PDB属性选项,用户可以创建服务并通过指定PDB属性将其与一个具体的PDB相关联。PDB属性为空的服务与Root关联,用户可以通过SRVCTL、Oracle Enterprise Manager Cloud Control、PL/SQL包提供的DBMS_SERVICE这三个应用程序管理服务。当用户创建一个PDB时,PDB一个新的缺省服务就被自动创建,该服务与PDB同名,不能使用SRVCTL程序管理这个服务,然而,用户可以定义服务和为应用程序定制服务

启动和关闭一个实例、登录和打开一个CDB,这些操作的原理和选项要熟练

在一个CDB中,Root和所有的PDB共享一个实例,当调用Oracle RAC时,Root和所有的PDB共享多并发数据库实例,用户可以启动和关闭整个CDB,但是不能启动和关闭单个的PDB。当CDB处于打开时,用户可以通过ALTER PLUGGABLE DATABASE语句、SQL PLUS的STARTUP命令和SHUTDOWN命令改变单个PDB的打开模式

创建CDB前提:要有足够的内存来存放Oracle实例;要有足够的磁盘空间来存放PDB,在Oracle RAC环境中必须要有足够的共享存储空间,CDB需要的磁盘存储空间是所有PDB和CDB所需要的空间和。对于初学者创建CDB时,Oracle强烈推荐用户使用DBCA程序, DBCA创建CDB是按步骤自动创建的过程,创建CDB时可以指定PDB数量。

使用图形化工具DBCA创建CDB的步骤是,先在Windows 7操作系统的运行程序框(Windows操作系统风筝键+R)中输入dbca,或者在开始菜单——Oracle-OraDB12Home1——配置和移植工具——Database Configuration Assistant,就可以进入到创建CDB数据库的可视化界面,创建CDB需要5个步骤。

❶ 在图2-3的界面中选择“创建数据库”选项。点击【下一步】按钮。

图2-3 DBCA运行窗口1

❷ 在图2-4的界面中选择“使用默认配置创建数据库(A)”选项。填写全局数据库名,例如,选择存储类型为【文件系统】,选择【数据库文件位置】和【快速恢复区】,数据库字符集选择中文字符集【ZHS16GBK-GBK 16位简体中文】并填写口令。勾选【创建为容器数据库(P)】并填写【插接式数据库名(Q)】。用户如果选择【高级模式(R)】,可以一次创建多个PDB。点击【下一步】按钮。

图2-4 DBCA运行窗口2

❸ 进入到图2-5以后,系统会自动对要创建的数据库进行“先决条件检查”。 检查完后点击【下一步】按钮。

图2-5 DBCA运行窗口3

❹ 进入到图2-6中后,系统给出了要创建容器数据库的概要提示。用户点击【下一步】就进入创建数据库过程,即进入【进度页】。

图2-6 DBCA运行窗口4

使用CREATE DATABASE SQL语句创建CDB要比使用DBCA更为常用,使用SQL语句创建CDB比使用DBCA的好处是用户可以通过脚本完成参数的自定义,当用户使用CREATE DATABASE SQL语句创建CDB时,用户必须有权限创建PDB,使PDB可操作,在创建时必须指出Root文件和Seed文件的文件名及其路径。使用SQL创建CDB数据库与使用SQL创建非CDB数据库很相似。

CDB数据库的启动分为三步:启动数据库例程、装载数据库、打开数据库。这三个步骤有顺序要求。关闭数据库的过程与此相反,先关闭数据库,再卸载数据库,最后关闭数据库例程。数据库启动和关闭顺序的示意如图2-7所示。对于PDB数据库同样也遵循图2-7的启动和关闭顺序步骤。

图2-7 数据库启动与关闭顺序示意

启动CDB数据库demo的操作过程如下。

❶ 启动监听服务。

$lsnrctl
LSNRCTL>start

系统提示服务已经启动。

❷ 启动数据库服务,CDB数据库名为demo,对应的数据库服务名是OracleServicedemo。

$oradim –startup -sid demo

系统提示该服务已经启动。用户也可以在Windows操作系统的控制面板打开服务程序进行手工操作。

Oracle 12c安装完毕后,以上两个服务默认是自动启动,如果这两个服务已经启动,那么就不需要这两步操作。

启动数据库

在命令提示符SQL>下,DBA用户可以对Oracle 12c数据库做以下的启动。

❶ 启动数据库例程,不装载数据库。

     SQL>STARTUP NOMOUNT

启动例程,常用来创建数据库,创建控制文件。

❷ 启动数据库例程,装载数据库。

     SQL>STARTUP MOUNT

❸ 打开控制文件(常用来改变日志模式,重命名文件,数据库恢复等),装载数据库强制启动数据库。

     SQL> STARTUP FORCE

执行该命令时,数据库首先强制关闭当前正在运行的数据库,然后再执行打开数据库例程、装载数据库和打开数据库操作,因此,这条命令能够直接打开数据库。

在打开了数据库例程并装载了数据库后,要打开数据库可使用命令:

     SQL>ALTER DATABASE OPEN;

例2-1:以sys身份连接数据库,密码是Oracle12c,输入以下命令连接数据库。

❶ 连接数据库。

     SQL>CONNECT sys/ Oracle12c as sysdba

系统提示“已经连接到空闲例程”。

❷ 装载数据库。

     SQL> STARTUP MOUNT

程序打印出Oracle数据库系统参数,这些参数包括Total System Global Area、Fixed Size、Variable Size、Database Buffers和Redo Buffers,并提示“数据库装载完毕”。

❸ 打开数据库。

     SQL>ALTER DATABASE OPEN;

系统提示“数据库已更改”。

关闭CDB数据库

在sqlplus中要关闭CDB数据库,需要先关闭PDB数据库pdborcl,如果有多个PDB数据库,就应逐个关闭PDB数据库,只有PDB都关闭后才能关闭CDB。无论关闭PDB数据库还是关闭CDB数据库都必须是sys用户。

关闭CDB数据库中的PDB数据库pdborcl的语句如下。

     SQL>ALTER PLUGGABLE DATABASE pdborcl CLOSE;

关闭PDB数据库后就可以关闭CDB数据库,关闭CDB数据库有以下几种方法。

     SQL>SHUTDOWN NORMAL
     SQL> SHUTDOWN IMMEDIATE

该命令包括关闭数据库、卸载数据库、关闭例程。

     SQL> SHUTDOWN ABORT
     SQL> SHUTDOWN TRANSACTIONAL

这四种关闭模式与数据库活动的关系见表2-3所列。

表2-3  4种关闭模式与数据库活动的关系

关闭模式 A I T N 关闭模式
A:Abort
I:Immediate
T:Transactional
N:Normal
允许新连接 No No No No
等到当前会话结束 No No No Yes
等到当前事务结束 No No Yes Yes
强制一个检查点并关闭文件 No Yes Yes Yes

CDB是Oracle 12c的基础与核心,没有CDB就不存在PDB,因此CDB是多租户(Multitenant)的基础。当Oracle 12c多租户系统启动后,每一个租户对应一个实例,每一个租户对应一个PDB,PDB的运行必须要由其插入的CDB运行为前提,如果一个多租户系统没有CDB的运行,那么该多租户中的每一个PDB都不能运行。

如果CDB中没有安装具体的应用,即CDB中没有创建具体的数据库对象(例如数据表和视图等),那么对于CDB数据库的操作主要是对其进行启动操作,只有启动了CDB数据库,才能够操作PDB数据库。

当然,CDB中也可以建立具体的应用,即用户可以在CDB数据库中创建表空间、数据表、视图等,如果在CDB中创建了具体的应用,操作CDB与操作PDB类似,但是Oracle 12c强烈推荐不要在CDB上建立具体应用,应该将具体应用建立在PDB上。

在Oracle 12c中,CDB与PDB是密不可分的,因此,CDB和PDB的启动与关闭也存在着密切的关系,由于PDB数据库是建立在CDB数据库基础上的,因此要启动、打开PDB数据库就必须先启动和打开CDB数据库;而关闭CDB数据库时,则必须先关闭所有的PDB数据库,打开和关闭CDB、PDB数据库的操作流程如图2-8所示,由于Oracle 12c规定一个CDB中最多可以包含250个PDB,因此,图中的i的最大值等于250。

图2-8 打开和关闭CDB、PDB数据库的操作流程

❶ 先打开SQL PLUS。

 $SQLPLUS / NOLOG

❷ 以SYS的身份连接CDB数据库demo,密码是Oracle12c,sys是Oracle 12c的超级用户,因此后面要加as sysdba选项;112.223.36.3是服务器IP地址;1521是服务器默认端口号。

 SQL> CONN conn sys/Oracle12c@112.223.36.3:1521/demo as sysdba

系统提示“已连接”。

打开SQL developer程序,需要先配置一个连接,程序界面如图2-9所示。在该界面图中,如果用户名填写SYS,连接角色就要选择SYSDBA,主机名填写IP地址或者计算机名,SID填写CDB数据库的ID。由于是连接CDB数据库,选择【服务名(E)】选项也正确。测试成功后,点击【连接】即可。

图2-9 在SQL Developer中配置CDB连接

打开CDB数据库demo后,用户就可以操作CDB数据库下的PDB数据库,查询当前CDB数据库信息。

SQL>SELECT name, cdb 
    FROM v$database;

创建PDB的先决条件是必须有一个CDB,因为在创建PDB时,必须要复制CDB中的文件到所创建的PDB中,CDB中的这些文件被称为种子(Seed)。假设在安装Oracle 12c中已经创建了CDB数据库demo。下面创建的PDB数据库就是建立在CDB数据库demo基础上的。

使用图形化界面创建数据库操作较为简单,由于使用这种方式创建PDB数据库时,很多参数都是操作者点击鼠标选择一下,有时在对该参数的意义及作用不理解的情况下,只要点击鼠标取默认值也可以创建自己的PDB数据库,因此,初学者创建数据库作为练习使用时,建议使用这种图形工具。使用图形化工具DBCA创建PDB时,先在Windows 7操作系统的运行程序框(Windows操作系统风筝键+R)中输入dbca,或者在开始菜单——Oracle-OraDB12Home1——配置和移植工具——Database Configuration Assistant,就可以进入到创建PDB数据库的可视化界面,创建PDB需要6个步骤。

❶ 在图2-10的界面中选择【管理插接式数据库(G)】选项。点击【下一步】按钮。

图2-10 创建PDB窗口1

❷ 在图2-11的界面中选择【创建插接式数据库(A)】选项。点击【下一步】按钮。

图2-11 创建PDB窗口2

❸ 在图2-12的界面中选择CDB数据库。由于图中显示的只有一个CDB数据库DEMO,因此默认就是DEMO数据库,系统已经勾选了该项。用户需要填写具有SYSDBA系统权限的用户,这里填写sys用户名,填写相应的密码。点击【下一步】按钮。

图2-12 创建PDB窗口3

❹ 在图2-13的界面中选择【创建新的插接式数据库(A)】选项。点击【下一步】按钮。

图2-13 创建PDB窗口4

❺ 在图2-14的界面中填写【插接式数据库名(D)】选项,这里填写mydb,存储类型取默认值“文件系统”,选择数据库位置,这里取默认路径,勾选【创建默认的用户表空间(S)】。输入该PDB数据库的【管理员用户名(U)】【管理员口令(V)】及【确认管理员口令(W)】。点击【下一步】按钮。

图2-14 创建PDB窗口5

❻ 在图2-15是创建PDB数据库前系统生成的摘要。点击【完成】按钮就进入创建PDB的过程,用户只需等待,系统就会完成PDB数据库的创建。

图2-15 创建PDB窗口6

从以上创建PDB的过程可以看出,使用DBCA创建过程比较简单,用户只需填写必要的信息即可。

在Oracle 12c中,自带的工具SQL Developer具有创建PDB的功能,该工具与先前版本的SQL Developer有较大的改进,其主要功能界面如图2-16所示。

图2-16 Oracle 12c 的SQL Developer功能界面

使用该工具可以使用图形化操作界面进行PDB数据库的创建。在创建过程中需要先配置一个数据库连接,并且一定是连接到已创建的CDB数据库,创建CDB连接的连接示意如图2-17所示,在图2-16配置CDB数据库demo连接时,选择【SID(I)】或【服务名(E)】均可。

图2-17 在Oracle 12c 的SQL Developer创建连接

数据库连接创建完成后,用户可以在SQL Developer点击【查看—>DBA】,就会出现图2-18中左边的目录树结构,在左侧的目录树的【容器数据库】节点右击,选择【创建可插入数据库(B)】选项,系统会出现如图2-18所示的界面,在该界面上填写PDB数据库名、管理员名称、管理员口令等选项,点击【应用】按钮即可创建一个PDB数据库。需要注意的是,该PDB数据库对应的CDB数据库是通过PDB数据库的连接来确定的,即PDB数据库对应一个连接,这个连接对应一个CDB数据库。图2-18中“文件名转换”,用户可以选择【无】【定制名称】或者【定制表达式】,用户如果选择【无】,表示创建的PDB数据文件名与种子文件名相同;用户如果选择【定制名称】,表示创建的PDB数据文件名及路径由用户指定;用户如果选择【定制表达式】模式,用户就要输入源文件模式和目标文件模式。

图2-18 在Oracle 12c 的SQL Developer创建PDB

用户创建完PDB数据库后可以到自己指定的目标路径下查看已经创建的数据库文件,这些文件有system01.dbf和sysaux01.dbf等数据文件。

用户使用CREATE PLUGGABLE DATABASE语句可创建自己PDB数据库。

由于DBA对于Oracle 12c系统非常熟悉,更喜欢使用SQL语句手工创建数据库,因为这种手工创建的PDB数据库是定制的,数据库会更适合用户的应用程序。用户手工创建PDB数据库可以通过以下4种方法。

使用create_pdb_clone语句克隆PDB时要使用参数src_pdb_name,参数src_pdb_name的值等于源PDB数据库名。如果新创建的PDB和源PDB同属于一个CDB,那么用户在CDB数据库上要具有CREATE PLUGGABLE DATABASE权限,这样才能够对源PDB进行克隆,创建新的PDB。如果参数src_pdb_name(源PDB数据库名)引用的PDB是位于远端的数据库,那么该用户也必须在CDB数据库上具有CREATE PLUGGABLE DATABASE的权限,同时源PDB的这个远端用户也必须在源PDB上具有CREATE PLUGGABLE DATABASE的权限。

上面阐述的手工创建PDB数据库的4种方法都需要通过CREATE PLUGGABLE DATABASE语句完成。图2-19较好地描述了创建PDB的分类和方法。

图2-19 创建PDB的分类和方法

使用STARTUP命令打开当前的PDB数据库时,必须满足以下条件:当前用户必须有SYSDBA、SYSOPER、SYSBACKUP或者SYSDG管理权限,这种权限必须提前授予或者是通过本地授权,该用户在连接PDB数据库时必须使用AS SYSDBA、AS SYSOPER、AS SYSBACKUP或者AS SYSDG进行相应的授限;如果不是用FORCE方式,那么当前的PDB必须是使用装载模式打开;要使当前PDB数据库处于装载模式,该PDB数据库必须以只读模式或者读写模式打开。

当前容器是一个PDB时,使用STARTUP命令可以打开该PDB数据库,使用STARTUP命令有FORCE、RESTRICT和OPEN选项。

FORCE:强制关闭当前的PDB数据库,再以读写模式重新打开PDB数据库,当使用FORCE参数时,不允许使用其他的选项或者参数。

例2-2:假设PDB数据库当前处于打开状态,使用FORCE参数强制关闭PDB数据库,然后再以读写模式重新打开。

SQL>STARTUP FORCE;

RESTRICT:该词的中文意思是“限制”和“约束”,使用该参数表示只有RESTRICTED SESSION系统权限的用户才可以访问PDB数据库。如果既没有使用OPEN READ WRITE,也没有使用OPEN READ ONLY参数,只使用了RESTRICT参数,那么,当PDB是一个物理备用(Standby)数据库时,该PDB数据库是以只读模式打开的,否则以读写模式打开。

例2-3:使用STARTUP命令,以只读限制模式打开当前的PDB数据库。

SQL>STARTUP RESTRICT OPEN READ ONLY;

OPEN open_pdb_options当以读写模式或者只读模式打开PDB数据库时,需要使用OPEN READ WRITE或者OPEN READ ONLY参数;当不指定RESTRICT参数时,缺省值是READ WRITE。

例2-4:使用STARTUP命令,以读写模式打开当前的PDB数据库。

SQL>STARTUP OPEN;

例2-5:使用STARTUP命令,以只读模式打开当前的PDB数据库。

SQL>STARTUP OPEN READ ONLY;

在用户SYS启动了CDB数据库demo后,PDB用户才能够启动PDB数据库pdborcl,PDB数据库pdborcl的用户是turing,启动PDB数据库的步骤如下。

❶ 首先要打开PDB数据库pdborcl。

SQL>ALTER PLUGGABLE DATABASE pdborcl OPEN READ WRITE;

系统提示:“插接式数据库已变更”。

❷ 使用SQL PLUS连接PDB数据库必须满足以下先决条件:连接到PDB数据库的用户必须被授予 CREATE SESSION的权限;PDB数据库必须处于打开状态;连接到PDB数据库的非DBA用户没有SYSDBA、SYSOPER、SYSBACKUP或SYSDG管理特权。

  $sqlplus /nolog
CONN[ECT] [logon] [AS {SYSOPER | SYSDBA | SYSBACKUP | SYSDG | SYSKM}]

式子中logon的语法格式为:

{username | /}[@connect_identifier] [edition={edition_name | DATABASE_DEFAULT}]

connect_identifier可以是全局数据库名或者IP地址。

例如,在CDB打开的情况下,使用SYS连接PDB数据库pdborcl的连接字符串为:

SQL>conn sys/Oracle12c@202.196.33.21:1521/pdborcl as sysdba;

用turing用户连接PDB数据库pdborcl。假设已经创建了用户turing,并赋予相应的权限,用户turing连接pdborcl数据库的语句为:

  SQL>conn turing/Oracle12c@112.223.63.83:1521/pdborcl

系统提示“已连接”,用户turing可以操作PDB数据库pdborcl了。用户也可以直接使用sys连接PDB数据库pdborcl,其语句为:

  SQL>conn sys/Oracle12c@112.223.63.83:1521/pdborcl as sysdba

在PDB数据库pdborcl已经打开的情况下,如果当前操作的是CDB数据库demo,那么,用户可以直接切换到PDB数据库pdborcl的用户sys下:

  SQL>ALTER SESSION SET CONTAINER=pdborcl;

用户连接到PDB数据库pdborcl情况下,可使用以下语句切换到CDB数据库demo的用户sys下:

  SQL>ALTER SESSION SET CONTAINER=cdb$root;

关闭PDB数据库必须要有相应的权限,用户sys具有关闭PDB数据库的权限,用户sys关闭PDB数据库pdborcl的语句为:

  SQL>ALTER PLUGGABLE DATABASE pdborcl CLOSE;

系统提示“插接式数据库已变更”。这种关闭PDB数据库的形式没有释放PDB数据库实例占用的内存空间。

使用SHUTDOWN命令关闭当前的PDB数据库时必须满足以下条件:当前用户必须有SYSDBA、SYSOPER、SYSBACKUP或者SYSDG管理权限,这种权限必须是已经提前被授予或者是通过本地授予的,该用户在连接PDB数据库时必须使用AS SYSDBA、AS SYSOPER、AS SYSBACKUP或者AS SYSDG行使相应的权限;如果要关闭当前的PDB数据库,当前的PDB必须处于打开模式。

关闭PDB数据库后,就可以退出PDB数据库返回到CDB数据库状态,只有退出了PDB数据库才能够释放PDB数据库实例占用的内存空间,退出PDB数据库也必须要有相应的权限,sys或具有退出PDB数据库的权限用户才能做该操作,用户sys退出PDB数据库pdborcl的语句为:

  SQL> SHUTDOWN IMMEDIATE

系统提示“插接式数据库已关闭”,当前状态仍然是PDB数据库状态,如果要返回到CDB数据库,需要再使用以下命令:

  SQL>conn sys/Oracle12c@112.223.63.83:1521/demo as sysdba

这样数据库就退回到CDB数据库状态,或者使用以下语句直接切换到CDB数据库的sys用户下:

  SQL>ALTER SESSION SET CONTAINER=cdb$root;

可通过SQL>SHOW con_name查看到当前CDB数据库名是demo。

用户在CDB数据库demo下创建了PDB数据库,用户才可以操作该CDB数据库下的PDB数据库,按照2.4节创建CDB和PDB的步骤,已经创建了CDB数据库demo,并在demo下创建了PDB数据库pdborcl,下面就以该PDB数据库为例进行阐述。

下面给出创建PDB数据库对象的完整操作步骤,阐述这部分知识时,会涉及后面章节的一些概念,读者可以参考后面章节内容,这里创建的PDB及其他数据库对象是马上要用到的一些常用对象。

连接数据库

$sqlplus/nolog
SQL> conn sys/Oracle12c@112.223.36. 3:1521/demo as sysdba

如果用户要将数据库对象(如表空间、用户、表等)创建在CDB数据库demo上,在连接到CDB数据库demo后就可直接进行操作,但是创建在CDB数据库上的用户的用户名必须以C##或者c##开头。

使用语句SQL>show user或者SQL>SELECT username FROM dba_users可以看到超级用户sys,使用以下语句可查看到当前数据库名。

       SQL>show con_names;
  或者 SQL>show pdbs;

即使已经定义有PDB,用户也看不到PDB数据库的用户名,也就无法操作PDB数据库pdborcl。

方式1:

 SQL>ALTER PLUGGABLE DATABASE pdborcl OPEN READ WRITE;

方式2:

 SQL>ALTER SESSION SET CONTAINER=pdborcl;  
 SQL>startup

可以用下列语句查询到该PDB数据库的信息。

 SQL>SELECT con_id, dbid, guid, name , open_mode 
     FROM v$pdbs;
 SQL>conn sys/Oracle12c@112.223.36.83:1521/pdborcl as sysdba

使用语句“SQL>Show user;”可查看到数据库当前用户。使用语句“SQL>Show pdbs;”可查看到数据库名。

创建表空间

 SQL>CREATE TABLESPACE pdb_tbs_test
     DATAFILE 'D:\Oracle12c\oradata\demo\pdborcl\pdb_tbs_data.dbf ' SIZE 10M
     AUTOEXTEND ON
     EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

要求路径D:\Oracle12c\oradata\demo\pdborcl必须存在,执行该操作后到路径D:\Oracle12c\oradata\demo\ pdborcl下可以查看到新增加了一个数据库文件pdb_tbs_data.dbf,该文件用于存放数据库pdborcl用户的永久数据。

使用相同的方法创建另一个永久表空间pdb_tbs_test1,后面章节要用到该表空间。

 SQL>CREATE TEMPORARY TABLESPACE pdb_tbs_temp
    TEMPFILE 'D:\Oracle12c\oradata\demo\pdborcl\pdb_tbs_temp_data.dbf ' 
    SIZE 50M AUTOEXTEND ON
    EXTENT MANAGEMENT LOCAL;

要求路径D:\Oracle12c\oradata\demo\pdborcl必须存在,执行该操作后到路径D:\Oracle12c\ oradata\demo\pdborcl下可以查看到新增加了一个数据库文件pdb_tbs_temp_data.dbf,该文件用于存放数据库pdborcl用户的临时数据。

用户可以通过查询语句查看自己创建的永久表空间和临时表空间信息。例如,用户查看已创建的永久表空间PDB_TBS_TEST详细定义的语句为:

 SQL>SELECT dbms_metadata.get_ddl('TABLESPACE','PDB_TBS_TEST')
     FROM dual ;

查看已创建的永久表空间PDB_TBS_TEST定义信息的语句为:

 SQL>SELECT *
     FROM user_tablespaces 
     WHERE tablespace_name= 'PDB_TBS_TEST';

创建用户并授权

 SQL>CREATE USER Turing 
     IDENTIFIED BY Oracle12c
     PROFILE DEFAULT
     DEFAULT         TABLESPACE   pdb_tbs_test
     TEMPORARY       TABLESPACE   pdb_tbs_temp
     ACCOUNT UNLOCK;

系统中新增加了一个用户Turing,用户Turing登录密码是Oracle12c,使用以下语句可以看到pdborcl数据库中处于活动状态下的所有用户,其中包括用户Turing。

 SQL>SELECT username 
     FROM dba_users;

操作命令SQL>show user的结果显示为“sys”时才可以做以下的授权操作。

SQL>GRANT CONNECT, SYSDBA, DBA,RESOURCE,
         CREATE SESSION, 
         CREATE TABLE,  
         CREATE PROCEDURE, 
         CREATE SEQUENCE,
         CREATE TRIGGER, 
         CREATE VIEW,  
         CREATE SYNONYM, 
         ALTER SESSION, 
         CREATE MATERIALIZED VIEW,
         CREATE DATABASE LINK 
    TO Turing;

由于后面要做多种类型的操作,所以这里授予用户Turing的权限较大。

创建数据表

为了便于读者阅读,选择大家都熟悉的演示数据库—学生选课数据库。国内计算机及相关专业的数据库教材一般都选择王珊、萨师煊老师编写的《数据库系统概论 (第四版)》,在该教材中有对学生选课数据库有详细的描述,这里仅做简单的阐述。

某高校教务管理系统要求一名学生可选修多门课程,一门课程由多名学生选修,一名学生选修一门课程参加考试就有该课程成绩。

该例子数据库中用到学生(Student)和课程(Course)两个不同的实体。学生(Student)实体属性构成有:学号(SNo)、姓名(SName)、年龄(SAge)、性别(SSex)、系别(SDept)。学号属于主属性。课程(Course)实体属性构成有:课程号(CNo)、课程名(CName)、学分(CCredit)、先修课程号(CPNO)。课程号属于主属性。

这两个实体的关系为:一个学生可选修多门课程,一门课程可由多名学生选修,即学生实体和课程实体之间存在着m : n的联系,将这种联系命名为SC,一名学生选修一门课程参加考试就有该课程成绩(Grade),成绩既不属于学生实体,也不属于课程实体,而是属于两个实体联系SC的属性。根据以上分析得出的ER图如图2-20所示。

图2-20 学生选课ER图

将图2-20转换为关系,由3个关系组成:学生(Student)实体转换为一个关系(Student),学生实体的属性就是转换后的关系的属性,学生实体的码就是转换后关系的码;课程(Course)也实体转换为一个关系(Course),课程实体的属性就是转换后的关系的属性,课程实体的码就是转换后关系的码;由于这两个实体的联系是mn,因此,需要将这个联系(SC)也转换为一个关系(SC),转换后关系的属性由学生实体的码、课程实体的码以及联系本身的属性构成,关系(SC)的码由学生实体的码和课程实体的码共同构成。由此得到的3个关系为:

Student(SNo,SName,SAge,SSex,SDept)
Course(CNo,CName,CCredit,CPNO)
SC(SNo,CNo,Grade)

上面的3组关系中,属性下面画直线的表示该属性是关系的主码;属性下面画曲线的表示该属性是关系的外码,因此,CPNO是关系Course的外码,SNo和CNo分别是关系SC的外码,外码SNo参照的是另一个关系Student的主码SNo的值,外码CNo参照的是另一个关系Course的主码CNo的值。

关系Student的属性定义见表2-4所列,关系Course的属性定义见表2-5所列,关系SC的属性定义见表2-6所列。

表2-4  Student表的属性定义

字段名

中文名

数据类型

约束条件

能否为空

SNo

学号

VARCHAR2(12)

Pimary Key

SName

姓名

VARCHAR2(10)

 

SAge

年龄

NUMBER

 

SSex

性别

VARCHAR2(4)

 

SDept

系别

VARCHAR2(20)

 

表2-5  Course表的属性定义

字段名

中文名

数据类型

约束条件

能否为空

CNo

课程号

VARCHAR2(8)

Pimary Key

CName

课程名

VARCHAR2(40)

Unique

CCredit

学分

VARCHAR2(8)

 

CPNO

先修课程号

NUMBER

 

表2-6  SC表的属性定义

字段名

中文名

数据类型

约束条件

能否为空

SNo

学号

VARCHAR2(12)

Foeign Key

CNo

课程名

VARCHAR2(8)

Foeign Key

Grade

成绩

NUMBER

100>Grade>0

 

用SQL语句创建用户登录表(Login)、学生表(Student)、课程表(Course)、选课表(SC)。 这里将表都创建为堆表结构形式,创建的数据库是本书的演示数据库,关于表的类型参阅后面章节。

❶ 创建登录数据库pdborcl的用户表login。

SQL>CREATE TABLE turing.login(
                      UserID varchar2(8)
                     ,UserPWD varchar2(12) not null
                     ,UserRole varchar2(100)
                     ,primary key(UserID) validate
                      )
                 ORGANIZATION HEAP
                 TABLESPACE pdb_tbs_test
                 pctfree 10
                 pctused 40
                 initrans 1;

❷ 创建学生表student。

SQL> CREATE TABLE turing.student(
                 Sno        VARCHAR2(12)
                ,Sname      VARCHAR2(10) not null
                ,SSex       VARCHAR2(4) 
                ,SAge       NUMBER
                ,SDEPT      VARCHAR2(20)
                ,unique     ("SNAME")
                ,PRIMARY KEY ("SNO") VALIDATE
                ,CHECK (SSex in('男','女'))
                ) 
              ORGANIZATION HEAP
              TABLESPACE pdb_tbs_test
              PCTFree 10
              PCTUsed 40 
              IniTrans 1 MAXTrans 255 
              storage ( initial 64K freelists 1 freelist groups 1 buffer_pool default) 
              logging NoCompress ;

❸ 创建课程表course。

SQL> CREATE TABLE turing.course(
              Cno       VARCHAR2(8)
             ,Cname     VARCHAR2(40) not null unique
             ,CPNO      VARCHAR2(8) 
             ,CCredit   NUMBER   
             , PRIMARY KEY ("CNO") VALIDATE
             ,FOREIGN KEY ("CPNO") REFERENCES turing.course("CNO")
             ) 
           ORGANIZATION HEAP
           TABLESPACE pdb_tbs_test
           PCTFree 10
           PCTUsed 40 
           IniTrans 1 MAXTrans 255 
           storage ( initial 64K freelists 1 freelist groups 1 buffer_pool default) 
           logging NoCompress ;

❹ 创建选课表sc。

SQL> CREATE TABLE turing.sc(
             Sno     VARCHAR2(12)
            ,Cno     VARCHAR2(8) 
            ,Grade   SMALLINT check (Grade>=0 and Grade<=100) 
            ,PRIMARY KEY ("SNO","CNO") VALIDATE
            ,FOREIGN KEY ("SNO") REFERENCES turing.student("SNO") VALIDATE
            ,FOREIGN KEY ("CNO") REFERENCES turing.course("CNO") VALIDATE
            ) 
           ORGANIZATION HEAP
           TABLESPACE pdb_tbs_test
           PCTFree 10
           PCTUsed 40 
           IniTrans 1 MAXTrans 255 
           storage( initial 64K freelists 1 freelist groups 1 buffer_pool default)
           logging NoCompress ;

用户创建了PDB数据库pdborcl、表空间、用户turing及数据库表,这样用户turing就可以操作该数据库了。

导入数据

向已经创建的PDB数据库pdborcl中导入数据。上面步骤已经完成了用户和表的创建,现在分别向这几个表中导入数据,这里使用Oracle 12c的sqlldr程序,要导入的数据保存在本书素材data目录下,读者只要将素材data目录下所有.txt文件和.ctl文件拷贝到c盘根目录下,其中.txt文件中保存的是相应表的数据,.ctl文件是程序sqlldr需要的控制文件。使用sqlldr命令向student表导入数据的语句为:

c:\sqlldr userid=turing/Oracle12c@112.223.36.83:1521/pdborcl control=input_student.ctl

向course表和sc表中导入数据时,只要将上述语句参数control语句中的控制文件分别换成input_course.ctl和input_sc.ctl即可,每次完成导入后,系统会给出有多少行数据导入到表中的提示。这里特别要注意,由于student表、course表和sc表属性之间存在引用关系,必须按照先student表,其次course表,最后是sc表的顺序导入数据,登录信息表login是单独一个表,与其他表没有关联。

如果读者对以上各步骤的知识已经熟悉,可以使用下面两种快速创建数据库对象的方法,使用这两种方法之前一定要用sys的身份登录PDB数据库pdborcl。

至此,完整的建立起了PDB数据库pdborcl,在turing用户名下成功实现了数据的导入,本书以后章节主要以PDB数据库pdborcl、用户名为turing的学生成绩管理数据库为例来讲述。由于学生成绩管理数据库只涉及3个表,数据类型非常有限,定义这3个表时用到的参数也不多,因此,在以后的章节中如果用到的数据类型在这3个表没有时,如DATE类型,就会调用PDB数据库pdborcl下其他用户的数据,例如HR、SH、OE、SCOTT等。

用SQL PLUS操作PDB数据库

SQL>conn sys/Oracle12c@112.223.36. 3:1521/demo as sysdba;

如果这时使用查询语句SQL>SELECT username FROM dba_users,只能看到CDB数据库demo的用户,看不到PDB数据库的用户信息。

用户turing要连接PDB数据库,PDB数据库pdborcl必须处于打开状态。因此,首先打开PDB数据库pdborcl。

SQL> ALTER PLUGGABLE DATABASE pdborcl OPEN;

系统提示“插接式数据库已变更”,然后用户turing就可以连接PDB数据库pdborcl了,连接操作如下。

SQL> conn turing/Oracle12c@112.223.36.3:1521/pdborcl

使用语句SQL>SELECT username。

FROM dba_users;

或者使用语句SQL>show user 可以看到用户turing。

用户turing连接了PDB数据库pdborcl后,如果使用以下查询语句,就可以看到PDB数据库用户信息了。

SQL>SELECT username 
    FROM dba_users;

这样用户turing可以操作PDB数据库pdborcl了。例如做以下操作。

 SQL>desc turing.student
 SQL>SELECT *
     FROM scott.emp;

这里emp表示scott模式下的一个数据表。

如果超级用户sys作为sysdba的身份连接CDB数据库demo,即执行查询语句。

SQL>conn sys/Oracle12c@112.223.36.83:1521/demo as sysdba;

又以sys的身份连接PDB数据库pdborcl,即执行查询语句。

SQL>conn sys/Oracle12c@112.223.36.3:1521/pdborcl as sysdba;

在PDB数据库pdborcl处于打开状态下,执行以下查询语句。

SQL>SELECT username 
    FROM dba_users;

这时用户看到的是CDB和PDB的用户名信息。

先用sys的身份连接CDB数据库demo。

  SQL>conn sys/Oracle12c@112.223.36.83:1521/demo as sysdba;

打开PDB数据库pdborcl。

  SQL>ALTER PLUGGABLE DATABASE pdborcl OPEN;

用户sys以sysdba的身份连接PDB数据库pdborcl。

  SQL>conn sys/Oracle12c@112.223.36.83:1521/pdborcl as sysdba;

如果sys不以sysdba的身份连接数据库,那么就无法对turing执行REVOKE收回权限的操作,如果用户turing仅以普通身份连接PDB数据库,turing无法撤销自己的操作权限。

  SQL>show user;

显示当前用户名是SYS。

  SQL>REVOKE dba FROM turing;

显示“撤销成功”。

SQL>conn sys/Oracle12c@112.223.36.83:1521/demo as sysdba;

由于用户turing要操作PDB数据库pdborcl,因此必须打开PDB数据库pdborcl。即使是超级用户sys要操作PDB,PDB数据库也必须处于打开状态,否则sys也不能操作PDB数据库。不过,超级用户sys在PDB数据库处于关闭状态下时可以对该数据库进行连接。打开PDB数据库pdborcl的语句为:

SQL>ALTER PLUGGABLE DATABASE pdborcl OPEN;

接下来需要以turing的身份连接数据库pdborcl。

SQL>conn turing/Oracle12c@112.223.36.3:1521/pdborcl;

使用命令SQL>show user显示的用户是“turing”。这样用户turing就可以删除其名下的数据对象了。例如,用户turing删除数据表login的操作语句为:

SQL>DROP TABLE login;

或者:

SQL>DROP TABLE turing.login;

❶ 以sys的身份连接CDB数据库。

  SQL>conn sys/Oracle12c@112.223.36.83:1521/demo as sysdba;

如果使用命令SQL>show user查看当前的用户,显示为“sys”;

❷ 关闭PDB数据库pdborcl。

  SQL> ALTER PLUGGABLE DATABASE pdborcl CLOSE;

❶ 先以sys身份打开CDB数据库demo。

    SQL>conn sys/Oracle12c@112.223.36.83:1521/demo as sysdba

❷ 打开PDB数据库pdborcl。

    SQL> ALTER PLUGGABLE DATABASE pdborcl OPEN;

❸ PDB数据库超级用户sys以sysdba的身份连接PDB数据库pdborcl。

    SQL>conn sys/Oracle12c@112.223.36.83:1521/pdborcl as sysdba;

❹ 删除用户turing。使用命令SQL>show user,显示当前用户名是sys,则可以使用以下命令删除用户turing。

    SQL>DROP USER turing。

用SQL Developer操作PDB数据库

由于CDB数据库是多租户的基础,PDB数据库是建立在CDB数据库基础之上的,在用SQL PLUS操作数据库时,如果不打开CDB则不能操作PDB数据库。打开CDB数据库后再打开PDB数据库,如果PDB数据库pdborcl没有打开,需要使用SQL PLUS程序打开,只有打开了PDB数据库才可以操作。

使用SQL Developer连接PDB数据库pdborcl,首先需要打开CDB数据库demo,不需要打开PDB数据库pdborcl。但是,如果要对pdborcl数据库进行查询操作,则需要打开PDB数据库pdbord。在SQL Developer中,配置PDB数据库pdborcl的连接如图2-21所示。配置PDB连接与配置CDB连接类似,这里需要注意:不要选择【SID(I)】选项,必须选择【服务名(E)】选项,这里的服务名是pdborcl。如果连接的是CDB数据库,则使用【SID(I)】选项或【服务名(E)】选项均可。

图2-21 在SQL Developer中配置PDB连接


相关图书

Oracle从入门到精通
Oracle从入门到精通
Oracle PL/SQL程序设计(第6版)(上下册)
Oracle PL/SQL程序设计(第6版)(上下册)
Oracle PL/SQL必知必会
Oracle PL/SQL必知必会
Oracle性能优化与诊断案例精选
Oracle性能优化与诊断案例精选
Oracle数据库管理与维护实战
Oracle数据库管理与维护实战
Oracle SQL疑难解析
Oracle SQL疑难解析

相关文章

相关课程