Managing Tables

本文介绍了Oracle数据库中不同类型的表存储方式,包括普通表、分区表、索引组织表和簇表的特点及应用场景。详细解释了ROWID的概念、格式及其在定位数据中的作用。此外,还介绍了创建表、临时表及表的维护操作,如手工分配扩展区、表重组、截断表、删除表等。

1、存储user data
1)普通tables
2)partitioned tables
3)index-organized tables
4)Clustered tables:前面三种就不再叙述了,讲讲这个吧。clustered table提供了一种存储table data的方法。一个cluster由一个或是一组tables组成,共享相同的data blocks,这主要是由于他们共享共同的columns并经常同时使用。其主要特点:
*  有cluster key,用于区分需要存储在一起的rows
*  cluster key可以包含一个或更多columns
*  clustering机制相对于应用时透明的。
*  修改cluster key中的某个column,将会导致物理的重新分配
*  cluster key相对于table的primary key是独立的。
*  创建cluster是为了改善性能的。对于clustered data,随机存取较快,但是对于全表扫描,clustered table将更慢。
*  clusters只是重新组织了tables的物理存储,并不影响逻辑结构。
2)数据类型
datatype如上图
①内建数据类型:
*  标量(scalar)数据类型
这里只描述几个不常用的:timestamp data type(存储date和time,包含9个小数位;其中TIMESTAMP和TIMESTAMP WITH LOCAL TIME ZONE可以被用于设置为primary key,但TIMESTAMP WITH TIME ZONE不可);raw data type(可以存储小的二进制data,此类数据在network中传输时,不需要进行字符集的转换);Oracle还提供了6中数据类型用于存储LOBs(CLOB和LONG存放定长的字符data;NCLOB用于存放定长本地字符集数据;BLOB和LONG RAW用于存放非结构化的data;BFILE存放OS文件中的非结构化数据)
note:ROWID是只用于查询的字段,是database中每一行data的唯一标识,是隐式存储在表中的,提供最快的访问方法,此外还会存储在index segments中,用于index的查询。
UROWID是在8.1版本中新增的,用于支持外表的rowid,可以存储在所有类型的rowid中。(这里没太搞懂啊~~~~(>_<)~~~~ )
*  集合(collections)数据类型:
    #  varying arrays(VARRAY):用于存储有少量数据元素的lists,它是数据元素的有序集合;在其中的所有元素的数据类型应该是一致的;每个元素都有一个与其位置相关联的index;元素的个数决定了varray的大小;其大小是可变的,但是在声明后Maximum size必须确定了。
     #  Nested Tables:提供了一种方法,将一个子表作为父表中的一个column的值。nested Table是一个records或rows的无序集合;存储在nested table中的数据应该有一致的结构;nested table中的rows与父表的存储是分离的;父表中只记录了nested table的pointer;nested table的存储特征可以由DBA来指定;对nested table没有Maximum size的限制。
*  关系(relationship)数据类型(REFs):此类数据主要在database中做pointer。
*  此外Oracle Server运行user定义自己的数据类型。

2、ROWID的格式

rowid
1)extended的rowid:需要占用disk上的10bytes来存储,显示时,将使用18个字符。主要由以下四部分组成:
*  data object number:标识了每个data的object。在table或是index等objects被创建时,会分配给其一个database全局唯一的number。
*  relative file number:在一个tablespace中的每个file的number是唯一的
*  block number:指明了在该file中包含此row的block的位置
*  row number:指明了在block header中该row的目录槽(directory slot)的位置
在内部,data object number需要32 bits,relative file number 10 bits, block number 22 bits,  row number 16 bits。总共80bits,即10 bytes。
entended rowid的显示是以16进制来显示的,一共18个字符,前6个位data object number,三个relative file number,六个block number,三个row number。
2)restricted rowid:是在Oracle7和更早的版本中使用的。内部只使用6 bytes。具体如图。此外在后期的版本中对于建立在非partition tables上的非partition index使用的仍是restricted rowid。
3)使用rowid定位row的位置
因为每个segment只能存储在一个tablespace中,所以使用data object number就可以确定具体的tablespace。使用file number确定相应tablespace中的data file。最后使用block number和row number进行定位
rowstrrow data被变长的存储在database blocks中。每条row中的columns会按照表定义的顺序存储,并且任何值为NULL的columns不会被存储,所以每一row种的columns数可能是不同的。如图,one row都会有一个row header(用于存放该row中的columns数量、连接信息、row lock状态)、row data(其中,每个column,都会存储column的长度和其value)。临界的rows之间不需要留空间。在block中每个row都对应一个row directory,用于指向row的开始位置。

3、create table
1)
* 关系型表:存储user data 的基本表
*  object table
都可以使用create table语句创建
note:在自己的schema上创建table,需要有create table权限,在其他user的schema上创建需要有create any table权限。
CREATE TABLE t_name(
col1 COL_TYPE,

)STORAGE ( INITIAL n[K|M] NEXT n[K|M] PCTINCREASE n MINEXTENTS n MAXEXTENTS n) [pctfree integer] [pctused integer] [initrans integer] [maxtrans integer] TABLESPACE tsp_name;
2)创建临时表
*  transaction-specific temporary tables:数据在当前transaction中存在。
*  session-specific temporary tables:数据存储在当前session存在的期间。
不同session中的data是隔离的。所以在temporary tables中不需要使用DML locks对data加锁。并且DMLs也不会产生redo log。可以在临时表上创建indexes、views、triggers,也可以使用export和import,但使用export得到的是没有data本身的。临时表的定义是在所有session中可见的。
CREATE GLOBAL TEMPORARY TABLE t_name … [ON COMMIT DELETE ROWS | ON COMMIT PRESERVE ROWS]

4、其他table的维护操作
1)手工分配extents
*  主要用于两种情况:控制table上extents的分布到指定的file上;在loading大量数据时避免动态的进行extended。
*  ALTER TABLE [schema]table ALLOCATE EXTENT [([SIZE integer [K|M]][DATAFILE 'filename'])]
如果没有指定SIZE参数,则会使用建表时的NEXT_EXTENT的大小来extended。
2)重组nonpartitioned table
nonpartitioned table可以在不用使用的export和import的情况下被move,同时它允许改变部分存储参数。主要用于下面的情况:
*  将一个table从一个tablespace移动到另一个tablespace
*  通过重组table消除其中的migration rows
但是在重组后需要rebuild indexes,否则使用indexes进程的操作将会报错
ALTER TABLE (schema)table MOVE TABLESPACE tsp_name;
3)truncate table
TRUNCATE TABLE [schema.]table [{DROP | REUSE} STORAGE]
该操作将删除table中的所有rows,并且会释放所使用的space,不会产生undo data,并进行了隐式的commit(因为它是一个DDL)。其table相对应的indexes也被删除了。但是如果一个table正在被其他的table最为foreign key参照,则不能被truncate。并且该table上相应的delete triggers将失效。DROP会移动高水位线,但是REUSE不会。
4)drop table
DROP TABLE [schema.]table [CASCADE CONSTRAINTS]
如果该table在外键关系中是父表,则必须指定CASCADE CONSTRAINTS。
5)drop a column
ALTER TABLE [schema.]table DROP COLUMN col_name [CASCADE CONSTRAINTS CHECKPOINT n]
该操作会清除 columns不再使用的space,重建indexes和constraints,时间开销较大。在8i之前,是没有此类操作的。
因为此操作耗时长,会产生大量的undo data。此时可以指定checkpoints,从而minimize所需的undo space。checkpoint子句指明每进行n行的update操作,会产生一个checkpoint。并且在进行drop columns时,table会标记为invalid,直到操作完成。
如果操作被中途中断,可以使用下面的语句进行:
ALTER TABLE [schema.]table DROP COLUMNS  CONTINUE;
6)使用unused option
除了drop columns,还可以将column标识为unused,此操作因为不会收回空闲不用的space,所以相对快些。被标识位unused的columns可随后被drop。被unused的columns,将无法被查询语句访问,describe也无法看到,user可以add一个有相同name的column。
当想要drop两个或以上的columns时,可以将其先设置为unused,在一起删除,更节省时间。
*  ALTER TABLE [schema.]table SET UNUSED COLUME col_name CASCADE CONSTRAINTS;
*  ALTER TABLE [schema.]table DROP UNUSED COLUMNS CHECKPOINT n;
*  ALTER TABLE [schema.]table DROP COLUMNS CONTINUE CHECKPOINT n;
查看被标识为unused的columns时,可以查看视图DBA_UNUSED_COL_TABS。
SELECT * FROM dba_unused_col_tabs;
查看完成了部分drop columns操作而被中断的columns信息,可以查看DBA_PARTIAL_DROP_TABS;
SELECT * FROM dba_partial_drop_tabs;
note:drop column受到下面的限制:
@  不可从object type table中drop column
@  不可删除nested tables中的columns
@  不可drop一个表中的所有columns
@  不可drop partitioning key columns
@  不可drop 属于SYS的tables中的columns
@  不可drop parent key column
@  不可drop组织索引表中的primary key所在column
@  在表中,如果LONG或是LONG RAW字段被标识为unused,但没有被drop,则会妨碍新的LONG或是LONG RAW字段被删除。

5、获得tables的information
主要是查看视图DBA_TABLES和DBA_OBJECTS

Posted in: Oracle9i DBA Fundamentals I Volume 1 • Student Guide.

 

 

FROM:http://www.gomudemi.org/?p=421

个人防护装备实例分割数据集 一、基础信息 • 数据集名称:个人防护装备实例分割数据集 • 图片数量: 训练集:4524张图片 • 训练集:4524张图片 • 分类类别: 手套(Gloves) 头盔(Helmet) 未戴手套(No-Gloves) 未戴头盔(No-Helmet) 未穿鞋(No-Shoes) 未穿背心(No-Vest) 鞋子(Shoes) 背心(Vest) • 手套(Gloves) • 头盔(Helmet) • 未戴手套(No-Gloves) • 未戴头盔(No-Helmet) • 未穿鞋(No-Shoes) • 未穿背心(No-Vest) • 鞋子(Shoes) • 背心(Vest) • 标注格式:YOLO格式,适用于实例分割任务,包含边界框或多边形坐标。 • 数据格式:图片数据,来源于监控或相关场景。 二、适用场景 • 工业安全监控系统开发:用于自动检测工人是否佩戴必要的个人防护装备,提升工作场所安全性,减少工伤风险。 • 智能安防应用:集成到监控系统中,实时分析视频流,识别PPE穿戴状态,辅助安全预警。 • 合规性自动化检查:在建筑、制造等行业,自动检查个人防护装备穿戴合规性,支持企业安全审计。 • 计算机视觉研究:支持实例分割、目标检测等算法在安全领域的创新研究,促进AI模型优化。 三、数据集优势 • 类别全面:覆盖8种常见个人防护装备及其缺失状态,提供丰富的检测场景,确保模型能处理各种实际情况。 • 标注精准:采用YOLO格式,每个实例都经过精细标注,边界框或多边形坐标准确,提升模型训练质量。 • 真实场景数据:数据来源于实际环境,增强模型在真实世界中的泛化能力和实用性。 • 兼容性强:YOLO格式便于与主流深度学习框架(如YOLO、PyTorch等)集成,支持快速部署和实验。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值