Oracle Database 12c 数据库简单实例的创建过程

本文基于Redhat 6.7操作系统,已经成功安装了Oracle 12c数据库,配置好了内核参数和环境变量,仅介绍一下如何新建一个实例
Oracle Database版本:Oracle Database 12c Release 2(12.2.0.1.0)
下载地址:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html

第一步,在之前创建好的,dba用户组下面的用户执行dbca,弹出图形界面

Oracle Database 12c 数据库简单实例的创建过程 - 图1
选择第一项,创建数据库,点击下一步
Oracle Database 12c 数据库简单实例的创建过程 - 图2
在第二页“创建模式”中选择“高级配置”,典型配置会留下很多大坑,很不推荐。
Oracle Database 12c 数据库简单实例的创建过程 - 图3
第三页选择单实例数据库,因为我们这里只创建一个能用的简单数据就行,如果想要做RAC集群,那么你还需要部署硬盘,这种情况会另写一片文章介绍
选择模板可以选择“定制数据库”或“一般用途或事务处理”,由于定制数据库是不基于模板的,所以创建过程非常缓慢,可能需要好几个小时的时间,而“一般用途或事务处理”是基于Oracle提供的模板创建,创建速度很快,5分钟不到即可完成,而且可配置的选项已经足够了,所以选择“一般用途或事务处理”。点下一步
Oracle Database 12c 数据库简单实例的创建过程 - 图4
Oracle Database 12c 数据库简单实例的创建过程 - 图5
第四页是充满大坑的选项,全局数据库名字可以随便填,但是SID必须是上面的名字+Sid格式来书写,否则后面会报找不到.ora文件的错误。
“容器数据库”是12c版本新加的一个功能,但是这个功能可能很少有人用,最麻烦的是一旦勾选了这个选项,那么你新建的数据库用户必须以C##开头,特别不方便,所以此处强烈建议不勾选容器数据库,除非你真的有这方面需求。
Oracle Database 12c 数据库简单实例的创建过程 - 图6
Oracle Database 12c 数据库简单实例的创建过程 - 图7
第五页默认即可
Oracle Database 12c 数据库简单实例的创建过程 - 图8
第六页指定快速恢复区,推荐全部勾选(图中没有勾选),有用快速恢复区之后,使用rman做的完整备份会被放到快速恢复区去,启用归档以后可以使用rman快速创建全库备份。如果此处不填写,那么以后再想启用归档就要把数据库实例停止之后再设置归档,而且会导致归档不完整,所以推荐建立实例的时候就开启归档。另外点击“编辑归档模式参数”按钮之后可以选择归档文件的保存地点,建议选择一个和快速恢复区、表空间不同的硬盘来存储,提高安全性。
注意快速恢复区还有一个大小限制,尽量设置的大一点并且定期清理快速恢复区的备份,否则快速恢复区满了之后会卡死数据库的。点击Edit archive mode parameters还可以配置归档日志的参数
Oracle Database 12c 数据库简单实例的创建过程 - 图9
“网络配置”页面一般使用oracle默认自建的LISTENER即可,使用默认1521端口,如果你想使用别的端口,或者多个端口,就勾选下面的创建新监听程序。一般推荐创建一个新的,以后改起端口来方便。
Oracle Database 12c 数据库简单实例的创建过程 - 图10
Data Vault选项保持默认(全都不勾选)即可
Oracle Database 12c 数据库简单实例的创建过程 - 图11
内存管理,如果不知道怎么配置那么就使用默认即可
Oracle Database 12c 数据库简单实例的创建过程 - 图12
第二个选择最大进程限制,这个也很关健,软件会根据你的cpu和内存情况提供给你一个默认值,但是如果你的应用线程池特别大,你又部署了好几台应用服务器的话,那么数据库连接数就会成倍增长,如果数据库连接数满了,那你用sqlplus就登录不进去了,所以一般推荐改的大一点,不过为了防止数据库性能被耗尽,也不要太大,1000左右就可以。
Oracle Database 12c 数据库简单实例的创建过程 - 图13
第三个标签容易留下大坑,最重要的是最上面数据库的存储方式,一定要选择UTF-8,下面的默认语言一定要选择“英语(美国)”,否则在使用命令行和SQLPULS的时候,中文字符很容易变成????,同样的问题还会出现在你应用的日志上,还是使用英文远离乱码的困扰好。
Oracle Database 12c 数据库简单实例的创建过程 - 图14
连接模式选择“专用服务器模式”
Oracle Database 12c 数据库简单实例的创建过程 - 图15
示例方案保持默认不勾选就行,点击下一步
Oracle Database 12c 数据库简单实例的创建过程 - 图16
EM据说是个精简版的Oracle,一般不用配置
Oracle Database 12c 数据库简单实例的创建过程 - 图17
Oracle Database 12c 数据库简单实例的创建过程 - 图18
配置管理员账户密码,一定要牢记,一会登录要用上
Oracle Database 12c 数据库简单实例的创建过程 - 图19
创建选项推荐勾选另存为数据库模板,这样可以很快的创建一模一样的数据库,为其他的测试环境创造便利。点击定制存储位置可以看到这个实例所创建的表空间的位置
注意这一步特别的关健,直接关系到你的数据库存放的位置,一般来说我们都会专门挂一个硬盘存放表空间和备份文件,所以这里一般是要手动修改表空间和控制文件的存放位置的,一定不要改错。同时,如果做集群,更需要注意这个存放位置一定要放到共享磁盘上去
Oracle Database 12c 数据库简单实例的创建过程 - 图20
Oracle Database 12c 数据库简单实例的创建过程 - 图21
Oracle Database 12c 数据库简单实例的创建过程 - 图22
修改默认如下图
Oracle Database 12c 数据库简单实例的创建过程 - 图23
还能看到重做日志的位置,并设置重做日志的大小,可以选择一个不同于表空间的位置存储,提高安全性。表空间和重做日志是肯定得有的,归档文件和快速恢复区是可选的,一般推荐全部都设置,并且放在不同的存储设备上。
Oracle Database 12c 数据库简单实例的创建过程 - 图24
修改默认后
Oracle Database 12c 数据库简单实例的创建过程 - 图25
点击下一步浏览一下概要
Oracle Database 12c 数据库简单实例的创建过程 - 图26
Oracle Database 12c 数据库简单实例的创建过程 - 图27
点击完成开始创建数据库实例,因为是基于模板创建,所以几分钟就可以了
Oracle Database 12c 数据库简单实例的创建过程 - 图28
Oracle Database 12c 数据库简单实例的创建过程 - 图29
完成之后注意“服务器参数文件名”这个配置文件,一定要以Sid.ora结尾,不然启动不了实例,需要修改配置的时候也是直接修改这个ora文件然后重启。
然后打开终端
使用dba组的用户(非root)执行sqlplus,要注意配置好环境变量。语法是sqlplus sys/sys的密码@数据库ip:端口/数据库实例名 as sysdba,如下图
Oracle Database 12c 数据库简单实例的创建过程 - 图30
然后我们就以dba的权限操纵数据库了,可以执行创建用户和分配表空间的操作
然后查看一下数据库的读写权限,还有默认的表空间的存放位置,我们新建的表空间最好也放到同一位置下
Oracle Database 12c 数据库简单实例的创建过程 - 图31
然后执行创建用户分配表空间的指令,如果前面都没问题那么此处应该都很顺利
Oracle Database 12c 数据库简单实例的创建过程 - 图32
注意如果报错权限不足,请检查是不是以sysdba用户登录的。请不要以system用户登录。
如果报错ORA-65096:公用用户名或角色名无效,那么说明你开了oracle容器,用户名要以C##开头。
建立完用户之后我们使用数据库客户端比如DBVisualizer或者Navicat这种,由于DBVisualizer使用的是JDBC连接,可以测试JDBC的兼容性,所以我比较喜欢用。
如果使用PLSQL那么一定要用12c的PLSQL,如果你用11g的netca,那么是连不上的,会报下面的错误ORA-28040:http://blog.csdn.net/kongxx/article/details/44887379

Oracle Database 12c 数据库简单实例的创建过程 - 图33
Oracle Database 12c 数据库简单实例的创建过程 - 图34
Oracle Database 12c 数据库简单实例的创建过程 - 图35
Oracle Database 12c 数据库简单实例的创建过程 - 图36
很顺利的连接成功,说明JDBC可用。顺道提一下,JDBC的连接url应该是类似于下面这种格式:
[java] view plain copy

  1. jdbc\:oracle\:thin\:@127.0.0.1\:1521/oadb

注意JDBC要注意版本的问题,对于12c的数据库要用12c的JDBC去连接,否则会报错找不到数据库实例的错误或者用户名密码错误。
JDBC的下载地址http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.html
注意ojdbc6.jar是给JDK1.6版本使用的,ojdbc7.jar是给JDK1.7和1.8使用的,注意不要下载错了。
附录:sqlplus不能连接数据库,而数据库已经建好的解决方案
使用DBCA创建完数据库以后,数据库实例是自动启动的,通过SQLPLUS和RMAN可以很轻松的连上(环境变量中ORACLE_SID要指定正确)。但是一旦在SQLPLUS里停止了这个实例,那么可能就再也连不上了。停止实例的命令是
[plain] view plain copy

  1. shutdown immediate

或者
[plain] view plain copy

  1. shutdown normal

那么你再通过SQLPLUS登录的时候,会报“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”的错误,此时使用
[plain] view plain copy

  1. lsnrctl status

命令也看不到刚刚关掉的数据库实例。
然后使用dbca想要修改这个数据库实例,DBCA报错该实例不属于当且节点。这个数据库实例就像被从本地删掉了一样。
出现这个问题的原因是当前数据库实例没有静态绑定到数据库监听器。数据库监听器只能监听到已经启动的数据库实例,所以就连接不上了,解决方法就是添加监听器对实例的静态绑定,那样不管数据库实例启动没有都可以通过SQLPLUS登录进去了。
方法是修改/u01/product/12.2.0/dbhome_1/network/admin/listener.ora,这个文件
【修改前】
[plain] view plain copy

  1. LISTENER =
  2. (DESCRIPTION_LIST =
  3. (DESCRIPTION =
  4. (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  5. )
  6. )

修改后添加了一个SID列表,如下
[plain] view plain copy

  1. listener.ora Network Configuration File: /u01/product/12.2.0/dbhome_1/network/admin/listener.ora

  2. Generated by Oracle configuration tools.

  3. SID_LIST_LISTENER =
  4. (SID_LIST =
  5. (SID_DESC =
  6. (SID_NAME = recoverySid)
  7. (ORACLE_HOME = /u01/product/12.2.0/dbhome_1)
  8. (GLOBAL_DBNAME = recovery)
  9. )
  10. (SID_DESC =
  11. (GLOBAL_DBNAME = oadb)
  12. (ORACLE_HOME = /u01/product/12.2.0/dbhome_1)
  13. (SID_NAME = oadbSid)
  14. )
  15. )
  16. LISTENER =
  17. (DESCRIPTION_LIST =
  18. (DESCRIPTION =
  19. (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
  20. )
  21. )

上面的SID_NAME和GLOBAL_DBNAME按照你上面创建实例的实际情况填写,可以填一个也可以填多个实例,注意一定不要填反了,SID_NAME就是以Sid结尾的名字。ORACLE_HOME就填环境变量中的ORACLE_HOME就可以,需要根据这个去bin目录下查找一个可执行文件。
配置好listener.ora之后,使用如下语句重启监听器
[plain] view plain copy

  1. lsnrctl stop
  2. lsnrctl start

进行重启,重启之后再使用lsnrctl status查看,就可以看到被我们关掉的实例的名字了,其状态应该为UNKNOWN,如果不配置listener.ora,那我们是看不到实例的名字的。
[plain] view plain copy

  1. [alex@localhost ~]$ lsnrctl status
  2. LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 19-OCT-2017 08:31:55
  3. Copyright (c) 1991, 2016, Oracle. All rights reserved.
  4. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
  5. STATUS of the LISTENER

  6. Alias LISTENER
  7. Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
  8. Start Date 19-OCT-2017 08:21:39
  9. Uptime 0 days 0 hr. 10 min. 15 sec
  10. Trace Level off
  11. Security ON: Local OS Authentication
  12. SNMP OFF
  13. Listener Parameter File /u01/product/12.2.0/dbhome_1/network/admin/listener.ora
  14. Listener Log File /u01/diag/tnslsnr/localhost/listener/alert/log.xml
  15. Listening Endpoints Summary…
  16. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
  17. Services Summary…
  18. Service “oadb” has 1 instance(s).
  19. Instance “oadbSid”, status UNKNOWN, has 1 handler(s) for this service…
  20. Service “recovery” has 2 instance(s).
  21. Instance “recoverySid”, status UNKNOWN, has 1 handler(s) for this service…
  22. Instance “recoverySid”, status READY, has 1 handler(s) for this service…
  23. Service “recoverySidXDB” has 1 instance(s).
  24. Instance “recoverySid”, status READY, has 1 handler(s) for this service…
  25. The command completed successfully