Oracle数据库、表空间与存储结构图文详解
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">一、核心概念:像理解仓库一样理解Oracle</a></li><ul class="second_class_ul"><li><a href="#_lab2_0_0">1. 数据块 (Data Block)</a></li><li><a href="#_lab2_0_1">2. 区 (Extent)</a></li><li><a href="#_lab2_0_2">3. 段 (Segment)</a></li><li><a href="#_lab2_0_3">4. 表空间 (Tablespace)</a></li><li><a href="#_lab2_0_4">5. 数据库 (Database)</a></li></ul><li><a href="#_label1">二、动手实践:如何创建数据库和表空间</a></li><ul class="second_class_ul"><li><a href="#_lab2_1_5">方法一:界面方式(推荐新手使用)</a></li><ul class="third_class_ul"><li><a href="#_label3_1_5_0">创建数据库:使用DBCA(数据库配置助手)工具。</a></li><li><a href="#_label3_1_5_1">创建表空间:使用navicat工具。</a></li></ul><li><a href="#_lab2_1_6">方法二:命令方式(需掌握的核心技能)</a></li><ul class="third_class_ul"><li><a href="#_label3_1_6_2">手动创建数据库(谨慎操作!)</a></li><li><a href="#_label3_1_6_3">使用SQL命令创建表空间</a></li></ul></ul><li><a href="#_label2">三、总结与回顾</a></li><ul class="second_class_ul"></ul></ul></div><p class="maodian"><a name="_label0"></a></p><h2>一、核心概念:像理解仓库一样理解Oracle</h2><p>想象一下一个大仓库(<strong>数据库</strong>),这个仓库被划分成了几个大的<strong>区域(表空间)</strong>,比如“家电区”、“食品区”。每个大区域里放着很多<strong>货架(段)</strong>,比如“电视货架”、“冰箱货架”。每个货架又是由一连串的<strong>货位(区)</strong> 组成的,而最小的存储单位就是每一个<strong>货位(数据块)</strong>。</p>
<p class="maodian"><a name="_lab2_0_0"></a></p><h3>1. 数据块 (Data Block)</h3>
<ul><li><strong>是什么</strong>:Oracle<strong>逻辑存储结构中最小的逻辑单位</strong>,就像仓库中最小的一个货位。</li><li><strong>关键点</strong>:<ul><li>大小由参数 <code>DB_BLOCK_SIZE</code> 决定。</li><li>一个数据块对应一个或多个物理块(操作系统块)。</li><li>结构包括<strong>块头</strong>和<strong>存储区</strong>两部分。</li></ul></li></ul>
<p class="maodian"><a name="_lab2_0_1"></a></p><h3>2. 区 (Extent)</h3>
<ul><li><strong>是什么</strong>:由一组<strong>连续的数据块</strong>结合而成。是Oracle<strong>存储分配的最小单位</strong>。就像一组连续的货位组成了一个完整的货位区间。</li></ul>
<p class="maodian"><a name="_lab2_0_2"></a></p><h3>3. 段 (Segment)</h3>
<ul><li><strong>是什么</strong>:由一个或多个区组成,是数据库对象的存储载体。就像一整个货架。</li><li><strong>种类</strong>(PPT中明确提到的):<ul><li><strong>数据段</strong>:存储表中所有数据(如一张学生表的所有数据)。</li><li><strong>索引段</strong>:存储表上最佳查询的所有索引数据。</li><li><strong>临时段</strong>:存储表排序操作期间建立的临时表的数据。</li><li><strong>回滚段</strong>:存储数据修改之前的位置和值(用于回滚事务)。</li></ul></li><li><strong>注意</strong>:<strong>视图(View)不是段</strong>,它只是一个虚拟表,不存储数据。</li></ul>
<p class="maodian"><a name="_lab2_0_3"></a></p><h3>4. 表空间 (Tablespace)</h3>
<ul><li><strong>是什么</strong>:数据库的<strong>最大逻辑划分区域</strong>。就是一个最大的逻辑区域。</li><li><strong>关键点</strong>:<ul><li>一个表空间由一个或多个<strong>数据文件</strong>组成。</li><li>一个数据文件只属于一个表空间。</li><li>表空间的大小等于其所有数据文件大小之和。</li></ul></li><li><strong>默认表空间</strong>(创建数据库时自动生成):<ul><li><code>SYSTEM</code>:系统表空间</li><li><code>SYSAUX</code>:辅助系统表空间</li><li><code>UNDO</code>:撤销表空间</li><li><code>USERS</code>:用户表空间</li></ul></li></ul>
<p class="maodian"><a name="_lab2_0_4"></a></p><h3>5. 数据库 (Database)</h3>
<ul><li><strong>是什么</strong>:以上所有内容的物理和逻辑集合。就是整个仓库。</li><li><strong>物理结构</strong>:由三种核心文件构成:<ul><li><strong>数据文件 (.dbf)</strong>:真正存储数据的地方。</li><li><strong>控制文件 (.ctl)</strong>:数据库中<strong>最小但最重要</strong>的文件,记录数据库的物理结构。</li><li><strong>日志文件 (.log)</strong>:记录所有数据变化,用于恢复。<ul><li><strong>重做日志文件</strong>:记录实时变化。</li><li><strong>归档日志文件</strong>:重做日志的历史备份。</li></ul></li></ul></li></ul>
<p class="maodian"><a name="_label1"></a></p><h2>二、动手实践:如何创建数据库和表空间</h2>
<p class="maodian"><a name="_lab2_1_5"></a></p><h3>方法一:界面方式(推荐新手使用)</h3>
<p class="maodian"><a name="_label3_1_5_0"></a></p><h4>创建数据库:使用DBCA(数据库配置助手)工具。</h4>
<p>这是一个图形化向导,按照步骤选择数据库名称、字符集、存储位置等即可轻松完成创建。</p>
<p>启动DBCA,进入cmd命令行输入dbca;在搜索栏搜索dbca文件以管理员的方式运行(推荐使用后者)出现“欢迎使用”界面,如图所示,单击“下一步”按钮进入创建数据库的向导。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064368.png" /></p>
<p>在“操作”窗口中,用户可以选择要执行的操作,这里选中“创建数据库”选项,如图所示,单击“下一步”按钮。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064310.png" /></p>
<p>在“数据库模板”窗口中,选择相应选项后单击“显示详细资料”按钮可查看该数据库模板的各种信息。这里选择“一般用途或事务处理”选项,如图所示,单击“下一步”按钮。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064393.png" /></p>
<p>在“数据库标识”窗口中输入“全局数据库名”和“SID”,如图所示,单击“下一步”按钮。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064380.png" /></p>
<p>在“管理选项”窗口中可以选择配置Enterprise Manager企业管理器或者配置Database Control管理本地数据库,这里保持默认设置,如图所示,单击“下一步”按钮。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064340.png" /></p>
<p>在“数据库身份证明”窗口中,将所有账户设置为同一管理口令,如图所示,单击“下一步”按钮。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064376.png" /></p>
<p>在“数据库文件所在位置”窗口中,选择“所有数据库文件使用公共位置”,单击“浏览”按钮选择数据库文件的存放路径,如图所示,单击“下一步”按钮。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064381.png" /></p>
<p>下一步</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064348.png" /></p>
<p>选择你自己找的到的地方</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064389.png" /></p>
<p>注意勾选示例方案</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064382.png" /></p>
<p>在“初始化参数”和“数据库存储”窗口中也保持默认配置,两次单击“下一步”按钮。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064355.png" /></p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064382.png" /></p>
<p>在“创建选项”窗口中选择“创建数据库”选项,如图3.9所示,单击“完成”按钮,之后会弹出确认创建的对话框,单击“确定”按钮开始创建数据库。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064347.png" /></p>
<p>耐心等待</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064331.png" /></p>
<p>创建数据库完毕后,系统会弹出窗口显示相关的提示信息,如图所示,需要在这一步解锁SCOTT、SYSTEM、SYS账户并设置其口令,单击窗口中的“口令管理”按钮,弹出“口令管理”对话框。找到以上三个用户账户,将“是否锁定账户”一栏里的勾去掉,修改口令。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064392.png" /></p>
<p>计算机管理->服务与应用程序->服务,注意将所有与Oracle有关的服务打开</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064399.png" /></p>
<p class="maodian"><a name="_label3_1_5_1"></a></p><h4>创建表空间:使用navicat工具。</h4>
<p>关于nvicat连接Oracle服务器的链接:<a href="https://www.jb51.net/database/349734h29.htm" target="_blank">https://www.jb51.nethttps://www.jb51.net/database/349734h29.htm</a></p>
<p>连接服务器,其他->表空间</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064362.png" /></p>
<p>新建表空间,输入名称、大小;注意下面的路径、自动扩展和下一个大小。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064312.png" /></p>
<p>保存输入表名称</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064346.png" /></p>
<p>在用户这里查看,没有刚刚创建的话就新建一个</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064380.png" /></p>
<p>新建用户,注意用户名和表空间要与刚刚创建的表空间一致,保存。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064381.png" /></p>
<p>之后就能查询到创建的表空间。</p>
<p style="text-align:center"><img alt="" src="https://img.jbzj.com/file_images/article/202509/2025091711064390.png" /></p>
<p class="maodian"><a name="_lab2_1_6"></a></p><h3>方法二:命令方式(需掌握的核心技能)</h3>
<p class="maodian"><a name="_label3_1_6_2"></a></p><h4>手动创建数据库(谨慎操作!)</h4>
<div class="jb51code"><pre class="brush:sql;">```sql
-- 1. 创建初始化参数文件(initmydb.ora),设置必要参数如:
DB_NAME=mydb
CONTROL_FILES=("E:\app\...\control01.ctl", "E:\app\...\control02.ctl")
...
-- 2. 连接并启动实例到NOMOUNT状态
CONN sys/password AS SYSDBA
STARTUP NOMOUNT pfile='E:\app\...\initmydb.ora';
-- 3. 执行CREATE DATABASE命令(核心)
CREATE DATABASE mydb
LOGFILE GROUP 1 ('redo01.log') SIZE 50M,
GROUP 2 ('redo02.log') SIZE 50M
MAXLOGFILES 5
MAXLOGMEMBERS 5
MAXDATAFILES 100
CHARACTER SET ZHS16GBK -- 使用中文常用字符集
NATIONAL CHARACTER SET AL16UTF16
DATAFILE 'system01.dbf' SIZE 500M
SYSAUX DATAFILE 'sysaux01.dbf' SIZE 500M
UNDO TABLESPACE undotbs DATAFILE 'undotbs01.dbf' SIZE 200M
DEFAULT TABLESPACE users DATAFILE 'users01.dbf' SIZE 100M;
-- 4. 创建附加表空间(可选)
CREATE TABLESPACE mytbs DATAFILE 'mytbs01.dbf' SIZE 100M;
```
**注意**:手动创建极易出错,如果出错,需要**删除所有已创建的数据文件**后重新运行。
</pre></div>
<p class="maodian"><a name="_label3_1_6_3"></a></p><h4>使用SQL命令创建表空间</h4>
<div class="jb51code"><pre class="brush:sql;">这是最常用的命令操作,必须掌握:
```sql
-- 创建一个名为`mytbs`的本地管理、自动段空间管理的表空间
CREATE TABLESPACE mytbs
DATAFILE 'E:\app\oradata\mydb\mytbs01.dbf' -- 数据文件路径
SIZE 100M -- 初始大小
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED -- 自动扩展
EXTENT MANAGEMENT LOCAL -- 本地化管理
SEGMENT SPACE MANAGEMENT AUTO; -- 段空间自动管理
-- 创建一个大数据文件表空间(BIGFILE)
CREATE BIGFILE TABLESPACE liyu_big
DATAFILE 'liyu_big.dbf' SIZE 2G;
-- 修改表空间大小
ALTER TABLESPACE liyu_big RESIZE 1G;
-- 重命名表空间(注意:SYSTEM和SYSAUX不能重命名)
ALTER TABLESPACE liyu_2 RENAME TO new_liyu_2;
-- 删除表空间( INCLUDING CONTENTS 会同时删除段数据)
DROP TABLESPACE liyu_big INCLUDING CONTENTS AND DATAFILES;
```
</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>三、总结与回顾</h2>
<table><thead><tr><th>概念</th><th>类比</th><th>解释</th><th>创建方式</th></tr></thead><tbody><tr><td><strong>数据库</strong></td><td>整个仓库</td><td>数据物理和逻辑的集合</td><td><code>CREATE DATABASE</code> 或 <strong>DBCA</strong></td></tr><tr><td><strong>表空间</strong></td><td>仓库分区</td><td>最大的逻辑存储单元,由数据文件组成</td><td><code>CREATE TABLESPACE</code> 或 <strong>OEM</strong></td></tr><tr><td><strong>段</strong></td><td>货架</td><td>存储数据库对象(表、索引等)</td><td>(随表/索引自动创建)</td></tr><tr><td><strong>区</strong></td><td>一组货位</td><td>由连续数据块组成,分配存储的最小单位</td><td>(自动分配)</td></tr><tr><td><strong>数据块</strong></td><td>单个货位</td><td>最小的I/O逻辑存储单位</td><td>(由参数决定)</td></tr></tbody></table>
<p><strong>学习建议</strong>:</p>
<ol><li><strong>理解概念</strong>:务必搞清这些概念之间的包含关系:<strong>数据库 > 表空间 > 段 > 区 > 数据块</strong>。</li><li><strong>动手练习</strong>:在自己安装的Oracle环境或学校实验室中,<strong>优先使用DBCA创建数据库</strong>,然后多用SQL命令练习<strong>表空间的创建、修改和删除</strong>。这是最实际有效的学习方式。</li><li><strong>谨慎操作</strong>:<code>DROP</code>命令一旦执行无法撤回,操作前务必确认无误。</li></ol>
頁:
[1]