百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

Oracle12.2创建数据库遇到的一些问题

sinye56 2024-10-03 00:34 7 浏览 0 评论

Oracle 12cR2推出以来,确实吸引了不少DBA的注意力,新版本特性还是需要多测试、多演练,做到心中有数,我从12cR2 Linux版本发布的第一天,就风风火火使用DBCA静默建库,尝了尝鲜,毫无疑问其中一个亮点就是多租户,也就是容器数据库CDB。

12c中因为有了CDB,这个架构相当动了Oracle的地基,所以create database语句也肯定会有大的变化,里面引入了seed数据库,而且在12.2中一个较大的变化是undo有local和share模式,这是区别于12.1的一大改进。

大家有没有试过手工建库呢?从自己的测试来看是有一些坑的,在此希望给需要的同学一些帮助,少走弯路。

12c中的create database语句

首先使用create database语句创建数据库,官方文档在12.2中提示的非常详细。

对于使用create database语句创建容器数据库,文档提供了两类方式,一种是使用OMF(Oracle Managed Files),另外一种是非OMF的方式,对于我们的日常使用来说,其实更倾向于使用非OMF方式,而如果数据库放在ASM里,则会倾向自动管理,因为ASM的文件管理是基于OMF方式的。

为了演示方便,我就使用OMF来说明,这样create database语句的结构相对清晰简单。

我们创建一个CDB,创建参数文件,启动数据库至nomount状态后,就可以使用下面的语句了。

CREATE DATABASE newcdb

USER SYS IDENTIFIED BY sys_password

USER SYSTEM IDENTIFIED BY system_password

EXTENT MANAGEMENT LOCAL

DEFAULT TABLESPACE users

DEFAULT TEMPORARY TABLESPACE temp

UNDO TABLESPACE undotbs1

ENABLE PLUGGABLE DATABASE

SEED

SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED

SYSAUX DATAFILES SIZE 100M;

和以往的版本不同的就是上面黄色部分标准的部分。

12c中的catcdb.sql脚本

创建数据库的步骤完成之后,只是完成了不到一半的工作量,另外一部分重点的工作就是初始化数据字典了,我们需要手工运行catalog.sql catproc.sql,这两个是初始化数据字典的核心脚本,而其它的一些publd.sql等脚本则是相应的辅助脚本,但是12.2却一改常态,在文档中表示需要使用catcdb.sql 这个脚本即可。

12.1中的catcdb.sql是一个确确实实的SQL文件,只是会在脚本中引用更多的SQL脚本,无论如何它的本质还是SQL脚本。

12.2中有了大的改进,catcdb.sql引用的是catcdb.pl这样一个Perl脚本,你不会直接看到catalog.sql,catproc.sql这样的字眼了,这些都被封装起来了。

当然换汤不换药,调用方式还是类似的。

碰到的第一个问题

这个脚本个人吐槽一下,运行脚本需要输入两个参数,但是两个参数的含义也没给解释,这一点值得改进,其实需要输入的是$ORACLE_HOME/rdbms/admin和catcdb.pl两个参数,如果你不知道输入什么也别担心,因为你会碰到一些其他的问题要先解决,我们不输入任何参数,先回车。

@?/rdbms/admin/catcdb.sql

SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb –logDirectory &&1 –logFilename &&2

Enter value for 1:

Enter value for 2:

Can’t locate Term/ReadKey.pm in @INC (@INC contains: /U01/app/oracle/product/12.2/rdbms/admin /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /U01/app/oracle/product/12.2/rdbms/admin/catcdb.pl line 30.

BEGIN failed–compilation aborted at /U01/app/oracle/product/12.2/rdbms/admin/catcdb.pl line 30.

抛出的错误提示找不到ReadKey.pm,但是我们知道Linux,Unix其实都是自带Perl的,是不是我们还要单独去重新配置安装Perl,其实不必,需要的文件在$ORACLE_HOME下的Perl目录,安装版本是5.22.0了,你只需要把这个目录引用到PATH变量中就可以了,比如:

export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/perl/bin: $ORACLE_HOME/jdk/bin:$PATH

第一个问题就解决了,别急,还有几个问题呢。

碰到的第二个问题

第二个问题来了,那就是找不到util.pm,还是Perl里的模块。

Can’t locate util.pm in @INC (you may need to install the util module) (@INC contains: /U01/app/oracle/product/12.2/rdbms/admin /home/U01/app/oracle/product/12.2/perl/lib/site_perl/5.22.0/x86_64-linux-thread-multi /home/U01/app/oracle/product/12.2/perl/lib/site_perl/5.22.0 /home/U01/app/oracle/product/12.2/perl/lib/5.22.0/x86_64-linux-thread-multi /home/U01/app/oracle/product/12.2/perl/lib/5.22.0 .) at /U01/app/oracle/product/12.2/rdbms/admin/catcdb.pl line 35.

BEGIN failed–compilation aborted at /U01/app/oracle/product/12.2/rdbms/admin/catcdb.pl line 35.

这个问题该怎么破,我们只能做点额外的工作了,在Perl的目录下查找util.pm竟然没有,是不是这个地方要重新安装这个模块,我们换一个思路,把util改为Util,竟然有5条匹配的记录。

$ find $ORACLE_HOME -name util.pm | wc -l

0

$ find $ORACLE_HOME -name Util.pm | wc -l

5条匹配的记录内容如下:

$ find $ORACLE_HOME -name Util.pm

/U01/app/oracle/product/12.2/perl/lib/5.22.0/x86_64-linux-thread-multi/List/Util.pm

/U01/app/oracle/product/12.2/perl/lib/5.22.0/x86_64-linux-thread-multi/Scalar/Util.pm

/U01/app/oracle/product/12.2/perl/lib/5.22.0/x86_64-linux-thread-multi/Sub/Util.pm

/U01/app/oracle/product/12.2/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/Util.pm

/U01/app/oracle/product/12.2/perl/lib/site_perl/5.22.0/HTTP/Headers/Util.pm

这个过程中到底该选哪个目录下的Util.pm呢,如果多点耐心仔细看看里面的内容还是能够找到一些头绪的,最后选择的是:

/U01/app/oracle/product/12.2/perl/lib/5.22.0/x86_64-linux-thread-multi/Hash/Util.pm

需要手工修改catcdb.pl脚本

那么问题来了,这个catcdb.pl脚本是不是要改动呢。

修改文件catcdb.pl,把如下黄色部分的util修改为Util

use Term::ReadKey; # to not echo password

use Getopt::Long;

use Cwd;

use File::Spec;

use Data::Dumper;

use Util qw(trim, splitToArray);

use catcon qw(catconSqlplus);

再来一轮测试,结果发现还是会有报错,这种尝试会让你开始怀疑自己的选择到底是不是正确的方向。

如果还是没有找到,说明在当前的环境变量中没有匹配到相关的内容,我们需要直接切换到目录Hash下,然后运行脚本才可以,这个时候输出才算有了改观,提示你输入密码。

SQL> host perl -I &&rdbms_admin &&rdbms_admin_catcdb –logDirectory &&1 –logFilename &&2

Enter value for 1: /U01/app/oracle/product/12.2/rdbms/admin

Enter value for 2: /U01/app/oracle/product/12.2/rdbms/admin/catcdb.pl

Enter new password for SYS: xxxx

Enter new password for SYSTEM: xxxx

Enter temporary tablespace name: temp

No options to container mapping specified, no options will be installed in any containers

catcon: ALL catcon-related output will be written to [/U01/app/oracle/product/12.2/rdbms/admin/catalog_catcon_46984.lst]

catcon: See [/U01/app/oracle/product/12.2/rdbms/admin/catalog*.log] files for output generated by scripts

catcon: See [/U01/app/oracle/product/12.2/rdbms/admin/catalog_*.lst] files for spool files, if any

然后就是一段时间的等待,可以从日志看到会关联调用catalog.sql,catproc.sql等脚本文件。

而在处理问题的过程中,也参考了一些资料,发现Deiby Gomez 也碰到了类似的问题,他在博客里提供了类似的解决方法。所以说这的的确确是12.2新版本中create database的一个坑,如果你对create database失去了信心,也别担心,其实不一定是你的错。

相关推荐

程序员:JDK的安装与配置(完整版)_jdk的安装方法

对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...

Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置

一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...

麒麟系统安装JAVA JDK教程_麒麟系统配置jdk

检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...

学习笔记-Linux JDK - 安装&配置

前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...

Linux新手入门系列:Linux下jdk安装配置

本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...

测试员必备:Linux下安装JDK 1.8你必须知道的那些事

1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...

Linux 下安装JDK17_linux 安装jdk1.8 yum

一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...

在Ubuntu系统中安装JDK 17并配置环境变量教程

在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...

如何在 Linux 上安装 Java_linux安装java的步骤

在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...

Windows和Linux环境下的JDK安装教程

JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...

linux安装jdk_linux安装jdk软连接

JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...

linux安装jdk,全局配置,不同用户不同jdk

jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...

运维大神教你在linux下安装jdk8_linux安装jdk1.7

1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...

window和linux安装JDK1.8_linux 安装jdk1.8.tar

Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...

最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?

默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...

取消回复欢迎 发表评论: