创建一个数据库
学习目标
- 了解创建数据库所需的先决条件
- 使用Oracle database Configuration Assistant创建数据库
- 手动创建数据库
- 使用Oracle Managed Files创建数据库
optimal Flexible Arch包括三个主要规则
- 建立一个目录结构,其中任何数据库文件逗可以存储在任何磁盘资源上。
- 为了提高并发性能,将具有不同行为的对象分离到不同的表空间中。
- 通过跨不同磁盘资源分离数据库组件来最大化数据库可靠性和性能。
软件和硬件目录结构
创建新数据库的条件
- 一个特权账户,操作系统、密码文件
- 启动实例所需的内存
- 新建数据库的磁盘文件
Oracle口令文件
-
什么是Oracle口令文件
- 口令文件是Oracle数据库用于验证具有管理员权限(如SYSDBA和SYSOPER)的用户的文件。它包含了用户名和经过加密的口令,使得这些特权用户能够在数据库未完全启动(如在nomount或mount阶段)或者通过远程连接以管理员身份登录到数据库进行管理操作。
- 例如,当需要执行数据库的启动、关闭操作或者进行备份恢复等关键任务时,使用具有SYSDBA或SYSOPER权限的用户登录是必不可少的,而口令文件就提供了这种验证机制。
-
口令文件的位置
- Linux/Unix系统:
- 通常位于
$ORACLE_HOME/dbs
目录下。例如,如果$ORACLE_HOME
是/u01/app/oracle/product/11.2.0/dbhome_1
,那么口令文件可能在/u01/app/oracle/product/11.2.0/dbhome_1/dbs
目录中,文件名一般是orapw<ORACLE_SID>
,其中<ORACLE_SID>
是数据库实例名。比如数据库实例名为orcl
,则口令文件名可能是orapworcl
。
- 通常位于
- Windows系统:
- 一般在
%ORACLE_HOME%\database
目录下。假设%ORACLE_HOME%
是C:\app\oracle\product\11.2.0\dbhome_1
,则口令文件可能在C:\app\oracle\product\11.2.0\dbhome_1\database
目录中,文件名类似于PWD<ORACLE_SID>.ora
,如PWDorcl.ora
(当实例名为orcl
时)。
- 一般在
- Linux/Unix系统:
-
口令文件的创建和管理
- 创建口令文件:
- 可以使用
orapwd
工具来创建口令文件。在命令行中(以Linux系统为例),语法为orapwd file=<password_file_name> password=<password> entries=<max_users>
。例如,orapwd file=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwnewdb password=secret123 entries = 10
,这里创建了一个名为orapwnewdb
的口令文件,口令为secret123
,并且最多允许10个用户。
- 可以使用
- 修改口令文件中的口令:
- 当需要修改具有SYSDBA或SYSOPER权限的用户口令时,可以使用
alter user
语句在数据库中修改。例如,alter user sys identified by newpassword
(假设修改sys用户的口令)。不过,这种方式只会更新数据库内部的口令记录,还需要确保口令文件也同步更新。在一些情况下,可能需要重新创建口令文件或者使用特定的工具来更新口令文件中的口令。
- 当需要修改具有SYSDBA或SYSOPER权限的用户口令时,可以使用
- 备份和恢复口令文件:
- 对口令文件进行备份是很重要的安全措施。可以使用操作系统的文件备份工具(如
cp
命令在Linux系统中)将口令文件复制到安全的位置。例如,cp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl /backup/orapworcl_backup
。在恢复时,需要确保将备份的口令文件放回正确的位置,并根据需要更新相关的配置。
- 对口令文件进行备份是很重要的安全措施。可以使用操作系统的文件备份工具(如
- 创建口令文件:
创建数据库有两种方式
- Oracle Universal Installer OUI
- Oracle Database Configuration Assistant DBCA
- CREATE DATABASE 命令
其中OUI是封装的DBCA。
DBCA是基于Java的、有图形化界面的、由Oracle通用安装程序启动的独立应用程序。
使用DBCA创建的步骤
-
启动DBCA(Database Configuration Assistant)
- 在Linux/Unix系统中,可以在终端中切换到
$ORACLE_HOME/bin
目录(假设ORACLE_HOME
环境变量已正确设置),然后执行./dbca
命令来启动DBCA。在Windows系统中,可以通过在开始菜单中找到Oracle相关的程序组,然后选择“Database Configuration Assistant”来启动。
- 在Linux/Unix系统中,可以在终端中切换到
-
数据库操作模式选择
- DBCA会提供几种数据库操作模式供选择,如“一般用途/事务处理”“数据仓库”“高级模式”。
- 一般用途/事务处理:适用于大多数传统的事务处理系统,比如企业的订单管理系统、财务系统等。这种模式下的数据库配置侧重于高效的事务处理,能够快速地处理大量的并发事务,如插入、更新和删除操作。
- 数据仓库:用于数据仓库应用场景,例如企业的数据挖掘和分析系统。这种模式的数据库更注重数据的存储和查询效率,尤其是在处理复杂的查询和数据分析任务时,如多表连接、聚合操作等。
- 高级模式:提供了更多的自定义选项,允许有经验的数据库管理员根据具体需求来配置数据库,如自定义存储设置、内存分配等。选择好操作模式后,点击“下一步”。
-
数据库标识设置
- 在这里需要输入数据库的全局名称(Global Database Name)和系统标识符(System Identifier - SID)。
- 数据库全局名称是数据库在网络环境中的唯一标识,通常由数据库名称和域名组成,格式为
<database_name>.<domain_name>
。例如,orcl.example.com
,其中orcl
是数据库名称,example.com
是域名。系统标识符(SID)是数据库实例在本地系统中的唯一标识,一般是一个简短的名称,如orcl
。设置完成后,点击“下一步”。
-
管理选项设置
- 可以选择是否使用Enterprise Manager(企业管理器)来管理数据库。Enterprise Manager是Oracle提供的一个功能强大的工具,用于集中管理数据库,包括性能监控、备份恢复、安全管理等诸多方面。
- 如果选择使用,还可以进一步配置Enterprise Manager的相关选项,如设置代理端口等。设置好后,点击“下一步”。
-
数据库身份证明设置
- 此步骤用于设置数据库的超级用户(如SYS和SYSDBA)的密码。这些密码非常重要,需要确保其安全性。
- 密码应该足够复杂,包含字母、数字和特殊字符,并且长度合适。设置好密码后,点击“下一步”。
-
存储选项设置
- DBCA提供了存储类型的选择,如“文件系统”“自动存储管理(ASM)”。
- 文件系统:这是比较传统的存储方式,将数据库文件存储在操作系统的文件系统中,如Linux系统中的
/u01/oradata
目录(假设存储路径为此)。在这种存储方式下,管理员需要手动管理文件系统的空间、文件布局等。 - 自动存储管理(ASM):这是Oracle提供的一种高级存储管理技术。它可以自动管理磁盘组、分配存储空间等,提高了存储的管理效率和性能。如果选择ASM,还需要进一步配置相关的磁盘组信息。选择存储选项后,点击“下一步”。
-
数据库文件位置指定
- 根据前面选择的存储选项,在这里可以具体指定数据库文件(包括数据文件、控制文件和重做日志文件)的位置。
- 如果选择了文件系统存储,需要输入文件系统的路径,如
/u01/oradata/<database_name>
。如果是ASM存储,需要指定相应的磁盘组名称。指定好位置后,点击“下一步”。
-
恢复配置设置
- 可以配置数据库的恢复选项,如是否启用归档模式(Archive Mode)。
- 归档模式用于记录数据库的所有更改操作,将重做日志文件备份到归档日志文件中。这样在数据库出现故障时,可以利用归档日志文件进行更完整的恢复,包括恢复到某个时间点。如果启用归档模式,还需要指定归档日志文件的存储位置。设置好恢复选项后,点击“下一步”。
-
数据库内容设置
- 可以选择是否在数据库中创建示例方案(Sample Schemas)。示例方案包含了一些用于演示和测试目的的数据库对象,如用于人力资源管理的
HR
方案、用于订单处理的OE
方案等。 - 这些示例方案对于学习和测试数据库功能很有帮助。如果选择创建示例方案,点击“下一步”。
- 可以选择是否在数据库中创建示例方案(Sample Schemas)。示例方案包含了一些用于演示和测试目的的数据库对象,如用于人力资源管理的
-
初始化参数设置
- DBCA会根据前面选择的数据库操作模式和其他配置自动生成一组初始化参数。这些参数包括内存分配参数(如
SGA_TARGET
和PGA_AGGREGATE_TARGET
)、进程数量参数等。 - 有经验的管理员可以在这里根据实际需求进一步调整这些参数。例如,如果数据库需要处理大量的并发连接,可以适当增加
PGA_AGGREGATE_TARGET
参数的值。调整好参数后,点击“下一步”。
- 数据库存储设置
- 此步骤主要用于查看和确认数据库文件的存储配置,包括数据文件、控制文件和重做日志文件的大小、数量等信息。
- 如果发现有不符合需求的配置,可以返回前面的步骤进行修改。确认无误后,点击“下一步”。
- 创建选项确认
- 在这一步,DBCA会显示前面所有步骤的配置信息,包括数据库名称、存储选项、恢复选项等。
- 仔细检查这些信息,确保符合预期。如果一切正确,点击“完成”按钮,DBCA就会开始创建数据库。创建过程可能需要一段时间,具体取决于服务器的性能和数据库的规模。创建完成后,会显示数据库创建成功的提示信息。
Oracle中的重要环境变量
- ORACLE_HOME
- 定义与作用:这是Oracle软件安装的主目录。它包含了运行Oracle数据库所需的二进制可执行文件、库文件、配置文件等诸多关键组件。例如,
sqlplus
(用于执行SQL命令的工具)、rman
(用于备份和恢复数据库的工具)等可执行文件就存放在$ORACLE_HOME/bin
目录下。在进行数据库相关操作时,如启动数据库实例、执行SQL脚本等,系统需要通过ORACLE_HOME
环境变量来定位这些工具和文件。 - 设置方式:在Linux/Unix系统中,可以通过编辑用户的
bash_profile
或bashrc
文件来设置。例如,添加export ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1
(具体路径根据实际安装位置而定),然后执行source bash_profile
或source bashrc
使设置生效。在Windows系统中,可以通过系统属性中的环境变量设置来添加ORACLE_HOME
变量,指定其值为Oracle软件的安装目录。
- ORACLE_BASE
- 定义与作用:它是Oracle数据库的基础目录,用于存放数据库相关的文件,如管理文件、诊断文件、数据文件等。
ORACLE_BASE
提供了一个更高级别的目录结构,方便对数据库相关文件进行统一管理。例如,数据库的告警日志文件通常存放在$ORACLE_BASE/diag/rdbms/<DB_UNIQUE_NAME>/<INSTANCE_NAME>/trace
目录下,这里的DB_UNIQUE_NAME
是数据库的唯一名称,INSTANCE_NAME
是数据库实例名称。 - 设置方式:和
ORACLE_HOME
类似,在Linux/Unix系统中可以在bash_profile
或bashrc
文件中设置,如export ORACLE_BASE = /u01/app/oracle
。在Windows系统中,通过系统环境变量设置窗口来添加和设置ORACLE_BASE
的值。
- 定义与作用:它是Oracle数据库的基础目录,用于存放数据库相关的文件,如管理文件、诊断文件、数据文件等。
- PATH
- 定义与作用:
PATH
环境变量用于指定操作系统在查找可执行文件时的搜索路径。对于Oracle数据库来说,需要将$ORACLE_HOME/bin
添加到PATH
环境变量中,这样才能在命令行的任何位置方便地执行Oracle相关的工具,如sqlplus
、expdp
(数据泵导出工具)等。例如,如果没有将$ORACLE_HOME/bin
添加到PATH
中,在执行sqlplus
命令时,操作系统可能无法找到该命令对应的可执行文件,除非在命令行中明确指定完整的文件路径。 - 设置方式:在Linux/Unix系统中,可以在
bash_profile
或bashrc
文件中修改PATH
变量。例如,export PATH = $PATH:$ORACLE_HOME/bin
,这将$ORACLE_HOME/bin
添加到现有的PATH
路径之后。在Windows系统中,通过系统属性中的环境变量设置窗口,在PATH
变量的值中添加%ORACLE_HOME%\bin
。
- 定义与作用:
- LD_LIBRARY_PATH(Linux/Unix系统特有)
- 定义与作用:在Linux/Unix系统中,
LD_LIBRARY_PATH
环境变量用于指定共享库(.so
文件)的搜索路径。Oracle数据库的一些程序在运行时需要加载特定的共享库,这些共享库可能存放在$ORACLE_HOME/lib
等目录下。设置LD_LIBRARY_PATH
可以确保系统能够正确找到这些库文件,使数据库相关程序正常运行。例如,当执行rman
命令进行备份恢复操作时,如果共享库路径设置不正确,可能会出现找不到库文件的错误。 - 设置方式:可以在
bash_profile
或bashrc
文件中添加,如export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:$ORACLE_HOME/lib
。同样需要执行source
命令来使设置生效。
- 定义与作用:在Linux/Unix系统中,
- NLS_LANG
- 定义与作用:
NLS_LANG
环境变量用于设置Oracle数据库的国家语言支持(National Language Support - NLS)相关的参数。它主要控制数据库客户端与服务器之间的字符集编码、日期格式等语言相关的信息。例如,正确设置NLS_LANG
可以确保在插入和查询包含中文等非ASCII字符的数据时,字符不会出现乱码。如果客户端的字符集和服务器的字符集不一致,通过合理设置NLS_LANG
可以解决字符编码转换的问题。在安装Oracle时,一般设置为:Unicode standard UTF-8 AL32UTF8 。 - 设置方式:在Linux/Unix系统中,可在
bash_profile
或bashrc
文件中设置,如export NLS_LANG = AMERICAN_AMERICA.UTF8
(这里以UTF - 8字符集为例)。在Windows系统中,同样通过环境变量设置窗口来添加和设置NLS_LANG
的值。
- 定义与作用:
Oracle手动创建数据库
一、准备工作
-
创建相关目录
- 在
ORACLE_BASE
目录下创建用于存放数据库文件的目录。例如,在Linux系统中,如果ORACLE_BASE
是/u01/app/oracle
,可以创建以下目录:mkdir -p /u01/app/oracle/oradata/<db_name>
用于存放数据文件(<db_name>
是你要创建的数据库名称)。mkdir -p /u01/app/oracle/fast_recovery_area/<db_name>
用于存放备份文件和归档日志(如果启用归档模式)。
- 在
ORACLE_HOME/dbs
目录下,确保有口令文件(orapw<db_name>
),如果没有,需要使用orapwd
工具创建。例如,orapwd file=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwnewdb password=secret123 entries = 10
。
- 在
-
配置参数文件(PFILE或SPFILE)
- 可以先创建一个文本格式的初始化参数文件(PFILE),通常位于
ORACLE_BASE/admin/<db_name>/pfile
目录下。例如,在文本编辑器中创建一个名为init<db_name>.ora
的文件,其中包含一些基本参数,如:db_name = <db_name>
(数据库名称)control_files = (/u01/app/oracle/oradata/<db_name>/control01.ctl, /u01/app/oracle/oradata/<db_name>/control02.ctl)
(控制文件路径)memory_target = 1G
(内存目标大小,可根据实际情况调整)processes = 150
(允许的最大进程数)
- 可以先创建一个文本格式的初始化参数文件(PFILE),通常位于
二、启动实例到NOMOUNT状态
- 设置环境变量
- 确保
ORACLE_HOME
、ORACLE_BASE
和PATH
等环境变量已正确设置。在Linux系统中,可以通过source
命令使bash_profile
或bashrc
中的环境变量设置生效。
- 确保
- 使用SQL*Plus连接到Oracle实例
- 在命令行中输入
sqlplus / as sysdba
,这将以系统管理员(SYSDBA)权限连接到Oracle实例。
- 在命令行中输入
- 启动实例到NOMOUNT状态
- 在SQL*Plus中执行命令
startup nomount pfile='/u01/app/oracle/admin/<db_name>/pfile/init<db_name>.ora'
,这里的路径是前面创建的初始化参数文件(PFILE)的路径。此时,Oracle实例会根据参数文件中的设置分配内存等资源,但还没有关联数据库文件。
- 在SQL*Plus中执行命令
三、创建数据库
- 使用
CREATE DATABASE
语句- 在SQL*Plus中执行以下语句(以下是一个基本示例,可根据实际需求调整参数):
-
CREATE DATABASE <db_name> LOGFILE GROUP 1 ('/u01/app/oracle/oradata/<db_name>/redo01.log') SIZE 50M, GROUP 2 ('/u01/app/oracle/oradata/<db_name>/redo02.log') SIZE 50M MAXLOGFILES 16 MAXLOGMEMBERS 3 MAXLOGHISTORY 100 DATAFILE '/u01/app/oracle/oradata/<db_name>/system01.dbf' SIZE 325M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED SYSAUX DATAFILE '/u01/app/oracle/oradata/<db_name>/sysaux01.dbf' SIZE 325M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED DEFAULT TABLESPACE users DATAFILE '/u01/app/oracle/oradata/<db_name>/users01.dbf' SIZE 50M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED TEMPORARY TABLESPACE temp TEMPFILE '/u01/app/oracle/oradata/<db_name>/temp01.dbf' SIZE 20M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
- 解释:
LOGFILE
部分用于创建重做日志文件,这里定义了两个日志文件组,每个组包含一个日志文件,文件大小为50MB。MAXLOGFILES
、MAXLOGMEMBERS
和MAXLOGHISTORY
分别限制了日志文件组的最大数量、每个组的最大成员数和日志历史记录的最大数量。DATAFILE
部分创建了数据文件,包括系统表空间(system
)、辅助系统表空间(sysaux
)和默认用户表空间(users
)的数据文件,指定了文件大小、自动扩展等属性。TEMPORARY TABLESPACE
用于创建临时表空间,用于存储临时数据,如排序操作产生的临时数据。
-
- 在SQL*Plus中执行以下语句(以下是一个基本示例,可根据实际需求调整参数):
四、创建其他必要的组件和配置
-
创建数据字典视图
- 执行
@?/rdbms/admin/catalog.sql
语句来创建数据字典视图。这里的?
是ORACLE_HOME
的占位符,这条语句会在ORACLE_HOME/rdbms/admin
目录下找到catalog.sql
文件并执行。这些视图用于方便地查询数据库的结构、对象等信息。
- 执行
-
创建PL/SQL包等对象
- 执行
@?/rdbms/admin/catproc.sql
来创建PL/SQL包等对象,这对于支持存储过程、函数等PL/SQL编程非常重要。
- 执行
-
设置用户权限和角色
- 根据需要创建用户并授予相应的权限和角色。例如,创建一个普通用户
test_user
:CREATE USER test_user IDENTIFIED BY password;
- 授予连接权限:
GRANT CONNECT TO test_user;
- 如果需要访问特定表空间,如
users
表空间,授予相应权限:GRANT USE TABLESPACE users TO test_user;
- 根据需要创建用户并授予相应的权限和角色。例如,创建一个普通用户
-
配置网络连接(可选)
- 如果需要远程连接数据库,需要配置
tnsnames.ora
和listener.ora
文件。在ORACLE_HOME/network/admin
目录下,编辑tnsnames.ora
文件,添加数据库服务名的定义,例如:-
<db_name> = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = your_host)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = <db_name>) ) )
- 同时,在
listener.ora
文件中配置监听器,确保它能够监听数据库服务对应的端口并将请求转发到正确的数据库实例。
-
- 如果需要远程连接数据库,需要配置