Oracle 数据库对象管理:表空间与表的操作

简介: 表空间和表的管理,是 Oracle 数据库日常维护里的基础操作。这篇文章从创建、修改到删除,一步步带你熟悉如何控制数据的“住址”和结构布局,还搭配了实用练习题,帮助你在实战中加深理解,学完就能自己动手建表了!

这次我们将深入学习如何管理数据库对象的核心——表空间 (Tablespace)表 (Table)。理解如何创建、修改和删除这些对象,是进行有效数据存储和管理基础

image.png
image.png

一、表空间 (Tablespace):数据的逻辑容器 1.1 什么是表空间?
表空间是Oracle数据库中一个 重要的逻辑存储结构。它 将数据库的物理存储 (即数据文件) 与逻辑对象 (如表、索引) 分离开来。你可以 把它想象成一个 逻辑上的“文件夹”或“磁盘分区”,数据库对象 (如表) 创建时会被 指定存储某个表空间中。

1.2 表空间的作用:
组织数据:可以将相关的数据库对象组织在同一个表空间中,便于管理。 控制磁盘空间分配:可以为 不同的表空间分配 不同的物理数据文件,从而 控制大小和增长
备份与恢复:表空间是备份和恢复基本单位之一,可以对单个表空间进行联机或脱机操作。 性能优化:可以将 I/O密集型的对象 分布在不同物理磁盘上的 不同表空间中, 改善性能

1.3 创建表空间 (CREATE TABLESPACE)

基本语法格式:

CREATE TABLESPACE tablespace_name
DATAFILE 'datafile_path_and_name' SIZE initial_size
[AUTOEXTEND ON [NEXT increment_size [MAXSIZE max_size | UNLIMITED]]]
[EXTENT MANAGEMENT LOCAL [AUTOALLOCATE | UNIFORM SIZE uniform_extent_size]]
[SEGMENT SPACE MANAGEMENT AUTO | MANUAL];

代码案例:创建一个名为 app_data_ts 的表空间

CREATE TABLESPACE app_data_ts
DATAFILE '/u01/app/oracle/oradata/ORCL/app_data01.dbf' SIZE 100M
AUTOEXTEND ON NEXT 50M MAXSIZE 500M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE
SEGMENT SPACE MANAGEMENT AUTO;

(路径 /u01/app/oracle/oradata/ORCL/ 请根据实际环境替换)

1.4 修改表空间 (ALTER TABLESPACE)
代码案例:为 app_data_ts 表空间添加数据文件
sql ALTER TABLESPACE app_data_ts ADD DATAFILE '/u01/app/oracle/oradata/ORCL/app_data02.dbf' SIZE 50M;
代码案例:修改 app_data01.dbf 数据文件大小
sql ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/app_data01.dbf' RESIZE 200M;
代码案例:设置表空间脱机/联机
sql ALTER TABLESPACE app_data_ts OFFLINE; ALTER TABLESPACE app_data_ts ONLINE;

1.5 删除表空间 (DROP TABLESPACE)
语法格式:
sql DROP TABLESPACE tablespace_name [INCLUDING CONTENTS [AND DATAFILES]] [CASCADE CONSTRAINTS];
代码案例:删除 app_data_ts (假设为空)
sql DROP TABLESPACE app_data_ts;
代码案例:删除 app_data_ts 及其内容和物理文件
sql DROP TABLESPACE app_data_ts INCLUDING CONTENTS AND DATAFILES;

二、表 (Table):结构化数据的核心 2.1 创建表 (CREATE TABLE)

基本语法格式:

CREATE TABLE [schema_name.]table_name (
column_name1 datatype [DEFAULT default_value] [column_constraint1 ...],
column_name2 datatype [DEFAULT default_value] [column_constraint2 ...],
...
[table_constraint1, ...]
)
[TABLESPACE tablespace_name]
[storage_clauses ...];

代码案例:创建一个 products

CREATE TABLE products (
product_id NUMBER(10) CONSTRAINT pk_product PRIMARY KEY,
product_name VARCHAR2(100) CONSTRAINT nn_product_name NOT NULL,
category_id NUMBER(5),
unit_price NUMBER(8,2) CONSTRAINT ck_product_price CHECK (unit_price >= 0),
supplier_id NUMBER(10),
entry_date DATE DEFAULT SYSDATE,
CONSTRAINT uq_product_name UNIQUE (product_name)
)
TABLESPACE app_data_ts;
2.2 修改表 (ALTER TABLE)
常见操作:
添加列
sql ALTER TABLE products ADD (stock_quantity NUMBER(5) DEFAULT 0);
修改列定义
sql ALTER TABLE products MODIFY (product_name VARCHAR2(150));
删除列
sql ALTER TABLE products DROP COLUMN supplier_id;
重命名列
sql ALTER TABLE products RENAME COLUMN entry_date TO creation_date;
添加/删除约束
sql -- 添加外键 (假设 categories 表和 category_id 主键已存在) ALTER TABLE products ADD CONSTRAINT fk_product_category FOREIGN KEY (category_id) REFERENCES categories(category_id); -- 删除唯一约束 ALTER TABLE products DROP CONSTRAINT uq_product_name;
重命名表
sql RENAME products TO items_inventory;

2.3 删除表 (DROP TABLE)
语法格式:
sql DROP TABLE [schema_name.]table_name [CASCADE CONSTRAINTS] [PURGE];
代码案例:删除 items_inventory
sql DROP TABLE items_inventory CASCADE CONSTRAINTS;

2.4 清空表 (TRUNCATE TABLE)
语法格式:
sql TRUNCATE TABLE [schema_name.]table_name [DROP STORAGE | REUSE STORAGE];
代码案例:清空 items_inventory 表 (假设已重命名回来或重新创建了products)
sql TRUNCATE TABLE products;

本章小结:
本章我们 重点学习了Oracle中 表空间管理操作。掌握 这些DDL语句构建和维护数据库 逻辑结构核心技能

---

练习题 (共10道)
  1. 创建表空间:编写SQL语句创建一个名为 user_data_ts 的表空间,数据文件为 /u02/oradata/DBNAME/user_data01.dbf (替换DBNAME),初始大小50M,允许自动扩展,每次10M,最大200M。区管理本地自动分配,段空间自动管理。
  2. 创建用户表:在 user_data_ts 表空间中创建一张名为 app_users 的表,包含列:user_id (NUMBER(8), 主键, 约束名 pk_appuser), username (VARCHAR2(50), 唯一, 非空, 约束名 uq_appuser_uname, nn_appuser_uname), email (VARCHAR2(100), 唯一, 约束名 uq_appuser_email), registration_date (DATE, 默认系统当前日期)。
  3. 添加数据文件到表空间:为 user_data_ts 表空间添加一个新的数据文件 /u02/oradata/DBNAME/user_data02.dbf,大小20M。
  4. 修改表 - 添加列:为 app_users 表添加一个新列 last_login_ip (VARCHAR2(15))。
  5. 修改表 - 修改列类型:将 app_users 表的 email 列长度修改为120个字符。
  6. 修改表 - 添加CHECK约束:为 app_users 表添加一个名为 ck_appuser_username_len 的检查约束,确保 username 的长度至少为3个字符。
  7. 修改表 - 重命名列:将 app_users 表的 registration_date 列重命名为 join_date
  8. 删除约束:删除 app_users 表上的唯一约束 uq_appuser_email
  9. 删除表并保留回收站:写出删除 app_users 表的SQL语句,确保它进入回收站 (如果回收站功能开启)。
  10. 彻底删除表空间:写出彻底删除 user_data_ts 表空间及其所有内容和物理数据文件的SQL语句 (假设里面可能还有其他对象)。
答案与解析:
  1. 创建表空间解析:

    CREATE TABLESPACE user_data_ts
    DATAFILE '/u02/oradata/DBNAME/user_data01.dbf' SIZE 50M
    AUTOEXTEND ON NEXT 10M MAXSIZE 200M
    EXTENT MANAGEMENT LOCAL AUTOALLOCATE
    SEGMENT SPACE MANAGEMENT AUTO;
    

    解析:创建了指定大小、自动扩展参数、区及段管理方式的表空间。

  2. 创建用户表解析:

    CREATE TABLE app_users (
    user_id NUMBER(8) CONSTRAINT pk_appuser PRIMARY KEY,
    username VARCHAR2(50) CONSTRAINT uq_appuser_uname UNIQUE CONSTRAINT nn_appuser_uname NOT NULL,
    email VARCHAR2(100) CONSTRAINT uq_appuser_email UNIQUE,
    registration_date DATE DEFAULT SYSDATE
    )
    TABLESPACE user_data_ts;
    

    解析:定义了各列的数据类型和约束,包括主键、唯一、非空和默认值,并指定了表空间。

  3. 添加数据文件到表空间解析:

    ALTER TABLESPACE user_data_ts
    ADD DATAFILE '/u02/oradata/DBNAME/user_data02.dbf' SIZE 20M;
    

    解析:为现有表空间增加了物理存储容量。

  4. 修改表 - 添加列解析:

    ALTER TABLE app_users
    ADD (last_login_ip VARCHAR2(15));
    

    解析:向表中添加了一个新的属性列。

  5. 修改表 - 修改列类型解析:

    ALTER TABLE app_users
    MODIFY (email VARCHAR2(120));
    

    解析:修改了email列的最大长度,允许存储更长的邮箱地址。

  6. 修改表 - 添加CHECK约束解析:

    ALTER TABLE app_users
    ADD CONSTRAINT ck_appuser_username_len CHECK (LENGTH(username) >= 3);
    

    解析:增加了对username字段长度的业务规则校验。

  7. 修改表 - 重命名列解析:

    ALTER TABLE app_users
    RENAME COLUMN registration_date TO join_date;
    

    解析:更改了列的名称,使其更符合业务语义。

  8. 删除约束解析:

    ALTER TABLE app_users
    DROP CONSTRAINT uq_appuser_email;
    

    解析:移除了对email列的唯一性要求。

  9. 删除表并保留回收站解析:

    DROP TABLE app_users;
    

    解析:默认情况下 (如果回收站开启且未指定PURGE),DROP TABLE 会将表放入回收站。

  10. 彻底删除表空间解析:

    DROP TABLESPACE user_data_ts INCLUDING CONTENTS AND DATAFILES;
    

    解析:此命令会删除表空间、其中所有对象段以及操作系统层面的物理数据文件,操作不可逆,需谨慎。

相关文章
|
安全 Linux 网络安全
Vivado 2017.04版本安装教程
Vivado 2017.04版本安装教程
1430 0
|
1月前
|
人工智能 自然语言处理 算法
2025年11月,数字人平台排行与数字化应用选择指南
数字人企业正引领未来产业新蓝海,AI交互与场景落地,推动数字人从概念走向规模化应用,重塑金融、教育、元宇宙等多领域生态,开启虚实融合的全新篇章。
|
3月前
|
机器学习/深度学习 数据采集 人工智能
Tongyi DeepResearch的技术报告探秘
引言阿里通义实验室悄悄(其实动静不小)发布了一个叫 Tongyi DeepResearch 的 Agent 项目。它没有开发布会,没请明星站台,甚至没发通稿——但它在 GitHub 上架当天,就登顶了“每日趋势榜”。这速度,比人类发现…
602 2
Tongyi DeepResearch的技术报告探秘
|
达摩院 Cloud Native 安全
数智洞察|阿里云发布《企业数字化咨询服务白皮书》
本白皮书既是阿里云结合各行各业数百个数字化项目的经验总结,更是企业数字化转型建设的实践指导。
3790 0
|
JSON PHP 开发工具
PHP Monolog 日志的使用
PHP Monolog 日志的使用
1254 0
|
编解码 C++ Python
成功解决LINK : fatal error LNK1181: 无法打开输入文件“avdevice.lib” error: command 'D:\\Program Files (x86)\\Micr
成功解决LINK : fatal error LNK1181: 无法打开输入文件“avdevice.lib” error: command 'D:\\Program Files (x86)\\Micr
成功解决LINK : fatal error LNK1181: 无法打开输入文件“avdevice.lib” error: command 'D:\\Program Files (x86)\\Micr
|
5月前
|
存储 消息中间件 调度
Django+Celery 进阶:动态定时任务的添加、修改与智能调度实战
Celery Beat 是 Celery 的定时任务调度组件,支持固定间隔、CRON 表达式等规则,可实现任务的周期性执行。本文详解了其原理、配置方式、与 Django 的集成步骤及实战代码示例,适用于构建具备定时任务管理功能的后台系统。
505 0
|
2月前
|
人工智能 监控 供应链
51_安全性测试:提示注入与红队
在2025年,大型语言模型(LLM)已成为企业数字化转型的核心驱动力,但随之而来的安全挑战也日益严峻。数据显示,全球每月监测到超过50万次针对大语言模型的越狱攻击,这些攻击利用LLM的"黑箱"特性和自主生成能力,突破了传统安全边界。特斯拉自动驾驶系统因对抗性贴纸导致12%测试场景意外加速、加拿大航空聊天机器人误导票价信息被勒令退款、韩国初创公司因AI数据泄露被罚9.3万美元、谷歌Bard曾因错误信息导致市值缩水1000亿美元等真实案例,都凸显了LLM安全的重要性
|
7月前
|
安全 网络协议 搜索推荐
远控安全金标准,ToDesk、向日葵、网易UU安全功能盘点,是否能攻破防线
本文对ToDesk、向日葵和网易UU三款主流远程控制软件进行了安全性评测。远程控制技术虽带来便利,但也存在安全隐患。文章从设备授权管理、远程连接与数据传输、隐私安全机制及主动防诈保护四个方面展开分析。ToDesk在二次验证、金融窗口保护等方面表现突出;向日葵基础安全功能完善但缺乏创新;网易UU侧重基础功能,安全机制尚待完善。最终通过星级表对比,ToDesk综合表现最佳,向日葵次之,网易UU适合低风险场景。未来远控软件需向体系化、智能化方向发展以应对不断演变的威胁。
|
8月前
|
人工智能 数据可视化 API
开箱即用的可视化AI应用编排工具 Langflow,可调用魔搭免费API作为tool
ModelScope 社区基于优秀的开源可视化AI应用编排工具 Langflow 搭建了创空间,以方便社区开发者基于社区开源模型及免费魔搭 API-Inference,快速创建Agent应用、RAG应用并将其部署为API服务。
1090 14

热门文章

最新文章