OracleDBA系列之--(二)创建数据库

  • 一、配置OS环境变量
  • 二、配置初始化文件
  • 三、创建必要的目录
  • 四、创建数据库
  • 五、创建数据字典

前一节传送门安装Oracle
数据库的创建也有两种方式:使用dbca(DatabaseConfigurationAssistant)和sqlplus两种方式;dbca也是图形化方式比较简单使用门槛较低,本文着重介绍dba常用sqlplus方式进行数据库创建。
数据库创建主要步骤:
一、配置OS环境变量
二、配置初始化文件
三、创建必要的目录
四、创建数据库
五、创建数据字典

一、配置OS环境变量

可以进行手动设置或使用脚本进行设置
1、手动设置,必须设置的几个变量如下

export ORACLE_HOME=/opt/app/oracle/product/12.2.0/db_1
export ORACLE_SID=orcl
export LD_LIBRARY_PATH=/usr/lib:$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH

要是这些变量永久生效需要登录到oracle用户在用户主目录下编辑.bash_profile文件,在文件末尾添加以上命令,使用source .bash_profile使配置生效
2、使用脚本配置环境变量,该配置方式适合服务器上存在多个数据库的情况便于管理,主要使用oratab及oraset脚本进行自动化设置。oraset依托oratab文件配置对应oracle环境变量;oratab文件一般存在与/etc目录下,文件格式为<oracle_sid>:<oracle_home_dir>:Y|N 其中Y|N表示是否跟随服务器启动而自动启动,如果/etc下没有该文件可以手动创建该文件,以以上格式进行编辑条目即可使用。


oraset脚本内容如下:

#!/bin/bash
# Sets Oracle environment variables.
# Setup: 1. Put oraset file in /etc(Linux), in /var/opt/oracle(Solaris)
#        2. Ensure /etc or /var/opt/oracle is in $PATH
# Usage: batch mode: . oraset <SID>
#        menu mode: . oraset
#=======================================================
if [ -f /etc/oratab ]; thenOTAB=/etc/oratab
elif [ -f /var/opt/oracle/oratab ]; thenOTAB=/var/opt/oracle/oratab
elseecho 'oratab file not found.'exit
fi
#
if [ -z $1 ]; thenSIDLIST=$(egrep -v '#|\*' ${OTAB} | cut -f1 -d:)# PS3 inmdicates the prompt to be used for the Bash select command.PS3='SID?'select sid in ${SIDLIST}; doif [ -n $sid ]; thenHOLD_SID=$sidbreak;fidone
elseif egrep -v '#|\*' ${OTAB} | grep -w "${1}:">/dev/null; thenHOLD_SID=$1elseecho "SID: $1 not found in $OTAB"fishift
fi
#
ORACLE_SID=$HOLD_SID
export ORACLE_SID
export ORACLE_HOME=$(egrep -v '#|\*' ${OTAB} | grep -w $ORACLE_SID:|cut -f2 -d:)
export ORACLE_BASE=${ORACLE_HOME%%/product*}
export TMP=$ORACLE_BASE/../tmp
export TMPDIR=$TMP
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ADR_BASE=$ORACLE_BASE/diag
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib

oraset脚本也应位于/etc目录下,需要修改为oracle用户组所属chown oracle:oinstall /etc/oraset
由于oratab文件中可以包含多个数据库条目,因此在执行oraset时会有数据库的选项,对于单一数据库则可以在用户主目录下.bashrc文件中添加 ./etc/oraset orcl 就可以在服务启动时设置对应数据库的环境变量

二、配置初始化文件

初始化文件相对于oracle数据库的重要性不必多言,主要就是spfile和init.ora两种文件。oracle官方推荐使用spfile文件,但我个人倾向于使用init.ora,因为spfile是二进制文件,oracle官方必然使处于安全性考虑二进制文件不会随便被篡改,但是不便于查看及编辑,需要使用ALTER SYSTEM进行修改,对于DBA来说必然是不会随意更改初始化文件的,init.ora仅是一个文本文件方便查看,因此我推荐使用init.ora方式。
其次init.ora也是可以轻松转换为spfile的,使用CREATE SPFILE [='路径'] FROM PFILE [='路径']语句即可,一般在oracle安装后会在$ORACLE_HOME/dbs目录下会自动生成一个init.ora文件。默认情况下oracle会在$ORACLE_HOME/dbs目录下查找初始化文件。
需要注意oracle启动时查找初始化文件的顺序为spfile<SID>.ora、spfile.ora、init<SID>.ora,因此文件名一定不能写错,否则将无法启动数据库。同时如果存在多个初始化文件情况下,如果仅修改了init.ora文件,根据启动时初始化文件的优先级将不会加载init.ora文件,这时你修改的配置将不会生效。
我的一个initorcl.ora配置如下:

db_name=orcl
db_block_size=8192
memory_target=1G
memory_max_target=1G
processes=300
control_files=(/opt/app/oracle/diag/controlfile/control01.ctl,/home/oracle/controfile/control02.ctl)
job_queue_processes=10
open_cursors=500
fast_start_mttr_target=500
undo_management=AUTO
undo_tablespace=UNDOTBS1
remote_login_passwordfile=EXCLUSIVE

部分参数推荐设置:对于11g及更高版本推荐设置memory_target和memory_max_target;对于10g则应设置sga_target、sga_target_max、 pga_aggregate_target、workarea_size_policy
强烈建议修改open_cursors,该参数默认值为50几乎永远是不够用的,特别是对于OLTP数据库需要更高的配置

三、创建必要的目录

在初始化文件中control_file目录必须提前创建完成

mkdir -p /opt/app/oracle/diag/controlfile
mkdir -p /home/oracle/controfile

控制文件建议分别放在不同的磁盘下,有效起到灾备恢复的作用。我这里由于用的本地数据库因此放在了同一磁盘下
在创建数据库时还需要有确定的数据库位置和重做日志目录

mkdir -p /opt/app/oracle/redo
mkdir -p /home/oracle/redo

重做日志同样建议放在不同磁盘下

mkdir -p /home/oracle/tbsfiles/systbsfiles
mkdir -p /home/oracle/tbsfiles/usertbsfiles

四、创建数据库

sqlplus / as sysdba 连接到空闲数据库

SQL> startup nomount

启动到nomount模式,此时会根据初始化文件启动数据库实例,分配相应的内存

创建数据库语句如下:

CREATE DATABASE orcl MAXLOGFILES 16 MAXLOGMEMBERS 4 MAXDATAFILES 1024 MAXINSTANCES 1 MAXLOGHISTORY 680 CHARACTER SET AL32UTF8
DATAFILE
'/home/oracle/tbsfiles/systbsfiles/system01.dbf'SIZE 500M REUSE EXTENT MANAGEMENT LOCAL
UNDO TABLESPACE undotbs1 DATAFILE
'/home/oracle/tbsfiles/systbsfiles/undotbs01.dbf'SIZE 800M
SYSAUX DATAFILE
'/home/oracle/tbsfiles/systbsfiles/sysaux01.dbf'SIZE 500M
DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE
'/home/oracle/tbsfiles/systbsfiles/temp01.dbf'SIZE 500M
DEFAULT TABLESPACE USERS DATAFILE
'/home/oracle/tbsfiles/systbsfiles/users01.dbf'SIZE 500M
LOGFILE GROUP 1('/opt/app/oracle/redo/redo01a.rdo','/home/oracle/redo/redo01b.rdo') SIZE 50M,GROUP 2('/opt/app/oracle/redo/redo02a.rdo','/home/oracle/redo/redo02b.rdo') SIZE 50M,GROUP 3('/opt/app/oracle/redo/redo03a.rdo','/home/oracle/redo/redo03b.rdo') SIZE 50M
USER sys IDENTIFIED BY system
USER system IDENTIFIED BY system;

以上语句附带有文字格式,如果直接复制执行可能会有问题,建议写成sql脚本进行引用执行,脚本如下:

CREATE DATABASE orcl MAXLOGFILES 16 MAXLOGMEMBERS 4 MAXDATAFILES 1024 MAXINSTANCES 1 MAXLOGHISTORY 680 CHARACTER SET AL32UTF8 DATAFILE '/home/oracle/tbsfiles/systbsfiles/system01.dbf'SIZE 500M REUSE  EXTENT MANAGEMENT LOCAL UNDO TABLESPACE undotbs1 DATAFILE  '/home/oracle/tbsfiles/systbsfiles/undotbs01.dbf' SIZE 800M SYSAUX DATAFILE  '/home/oracle/tbsfiles/systbsfiles/sysaux01.dbf' SIZE 500M DEFAULT TEMPORARY TABLESPACE TEMP TEMPFILE '/home/oracle/tbsfiles/systbsfiles/temp01.dbf' SIZE 500M DEFAULT TABLESPACE USERS DATAFILE '/home/oracle/tbsfiles/systbsfiles/users01.dbf' SIZE 500M LOGFILE GROUP 1 ('/opt/app/oracle/redo/redo01a.rdo','/home/oracle/redo/redo01b.rdo') SIZE 50M,GROUP 2 ('/opt/app/oracle/redo/redo02a.rdo','/home/oracle/redo/redo02b.rdo') SIZE 50M,GROUP 3 ('/opt/app/oracle/redo/redo03a.rdo', '/home/oracle/redo/redo03b.rdo') SIZE 50M USER sys IDENTIFIED BY system USER system IDENTIFIED BY system;

执行成功后如下:

部分参数说明:
system表空间建议使用本地管理,这样可以强制数据库中其他表空间都在本地管理;
reuse参数应谨慎使用,该参数会覆盖对应路径下已经存在的文件,不论那些文件是否正在使用;
创建sys及system用户目的是为了修改这两个用户的默认密码,sys默认密码是change_on_install,system默认密码为manager
重做日志后缀名命名为rdo是为了与普通log区别开,避免误删,使用任何后缀名都是可以的。

五、创建数据字典

1、创建完成后数据库还不能用,需要对数据库进行实例化数据目录及数据字典,需要运行两个脚本。必须使用sys用户去执行这两个脚本。
catalog.sql是用来创建数据库的数据字典文件的,如果不执行则无法使用哪怕是select * from这样的语句,因为不识别关键字;
catproc.sql是用来创建数据库的基本过程和包的,如果不执行则无法使用哪怕是substr()这样的函数。
在执行以上两个脚本之前可以先创建一个日志以便在执行出错时便于查看错误信息

sqlplus / as sysdba
spool create_dd.log
@?/rdbms/admin/catalog.sql
@?/rdbms/admin/catproc.sql

这两个脚本执行时间较长,需要耐心等待。

出现上图提示时代表catproc.sql脚本已经执行完成。
在生成的日志中查看会发现较多的ORA错误,不必担心,这是由于脚本要考虑到多次执行的情况下在进行create前先进行了drop操作,drop不存在的对象时才会报错,可以忽略。

如果在切换system用户时出现以上错误可能是由于在执行过程中有中断导致的,重新再执行一次以上两个脚本即可
2、创建完成后切换为system用户创建PRODUCT_USER_PROFILE表,该表是对数据库用户的权限管理表,如果不创建该表在使用sqlplus进行连接时会出现Error accessing PRODUCT_USER_PROFILE的警告,但不影响使用,如果不想看到这些警告信息则可以执行pupbld脚本来避免这些警告:

@?/rdbms/admin/pupbld


数据库在这个时候已经创建完成,可以正常使用了。但是一般数据库都是存在在远程服务器端的,然后通过客户端连接的。那么此时只创建数据库还不够,还需要配置监听能够使服务端让远程客户端连接,这正是下一章的内容:配置和实现监听。

OracleDBA系列之--(二)创建数据库相关推荐

  1. 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式(转载)

    源地址:http://doc.chinaunix.net/python/200703/202210.shtml 本文详细介绍Python 设计模式系列之二: 创建型 Simple Factory 模式 ...

  2. SQL Server 实验二 创建数据库

    SQL Server 实验二 创建数据库 这是一个系列,需几个文档一起看 Use master go Drop Database YGGLcreate database YGGL on (name=' ...

  3. H2教程系列(二) 创建数据库

    H2教程系列文章目录 第一章 H2入门之简介与安装 第二章 H2入门之创建数据库 创建数据库 目录 H2教程系列文章目录 一.创建数据库 二.验证效果 一.创建数据库 打开命令行 进入H2安装目录的b ...

  4. Mysql学习(二)创建数据库和表

    MySQL简介 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在WEB应用方面,MySQL是最好的 ...

  5. 【Mysql系列】MySQL创建数据库、CURD的操作

    文章目录 创建数据库的命令 MySQL 数据类型 接下来就是在数据库里面创建表了 删除表 给表格中插入数据 查询数据 where语句的使用 修改数据 删除数据(这里我们讲的都是对表格内容进行的操作) ...

  6. 区块链浏览器环境配置二--创建数据库

    github地址 https://github.com/hyperledger/blockchain-explorer/tree/v1.1.7 git clone git clone https:// ...

  7. maven web项目导入sts_Spring Boot2 系列教程(二)创建 Spring Boot 项目的三种方式

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 43W+,如下图: 2017 年由于种种原因,就没有 ...

  8. 数据库系列(二):数据库基础02

    1.MySQL 数据类型 MySQL中定义数据字段的类型对你数据库的优化是非常重要的. MySQL支持多种类型,大致可以分为三类:数值.日期/时间和字符串(字符)类型. 1.1.数值类型 MySQL支 ...

  9. 微信移动端数据库组件WCDB系列(二) — 数据库修复三板斧

    前言 长久以来SQLite DB都有损坏问题,从Android.iOS等移动系统,到Windows.Linux 等桌面系统都会出现.由于微信所有消息都保存在DB,服务端不保留备份,一旦损坏将导致用户消 ...

最新文章

  1. php控制器无限极分类,thinkphp无限极分类实现方法
  2. 【运筹学】线性规划 人工变量法 ( 人工变量法案例 | 初始单纯形表 | 检验数计算 | 入基变量 | 出基变量 )
  3. 自学Zabbix3.0版本以上资产清单inventory
  4. python答案公众号_大学慕课用Python玩转数据答案查题公众号
  5. mybatis教程--原始方式和mapper方式开发dao详解
  6. QT的QDtls类的使用
  7. fgets,cin. getline被跳过
  8. 【Java开发规范】hashCode 和 equals 的处理规则
  9. 常用几个UITableView,UICollectionView  UIScrollView关键点
  10. 【转载】六合一调试神器TTL转USB模块
  11. iTextSharp显示中文
  12. Navicat删除注册表
  13. P5339 [TJOI2019]唱、跳、rap和篮球
  14. 页面打印表格换页问题
  15. 全站翻译分享---Localize平台的使用方式整理--Star.hou
  16. 考计算机用win10行吗,老电脑适合装win10吗
  17. 微信小程序实现轮播图(超简单)
  18. jQuery File Upload
  19. 视频安防“上帝视角“的畅想
  20. 简单使用AspectJ

热门文章

  1. webots自学笔记(九)弹簧与阻尼添加
  2. 排序:quicksort,quicksort3way
  3. 欧几里得及拓展欧几里得
  4. Morning Jogging(贪心)
  5. 数学归纳法全讲解(第一、第二、弱、强、双变量)带示例
  6. Mysql主备恢复处理思路
  7. allegro16.6系统gerber文件输出规范详解
  8. HttpServletRequest、ServerHttpRequest获取访问者真实IP,并设置ip白名单
  9. 在一种特殊情况下损坏了wav音频文件,修复的方法
  10. Shopee商品主图和别人一样会不会被扣分?