데이터 베이스 MySQL 튜토리얼 Oracle 10g 对象管理

Oracle 10g 对象管理

Jun 07, 2016 pm 05:02 PM
o 데이터 베이스

ORACLE数据库中,表,索引,存储过程,函数等都是对象。schema 的名称与用户名相同,但是与用户不是同一回事,如果用户没有任何对

Oracle数据库中,表,索引,存储过程,函数等都是对象。
schema 的名称与用户名相同,但是与用户不是同一回事,如果用户没有任何对象,则schema就不存在。
一、表
ORACLE表分四类:
普通表     ---  一个表对应一个segment
分区表 Partition Table   虚拟表,没有对应的segment
索引组织表  Index Organized Table  简称 IOT   虚拟表
簇表      ---   虚拟表  首先建立一个簇,一个簇对应一个segment

1、普通表
1)tablespace部分 设置表的logging属性, Yes 表示对表DML操作生成重做条目, No 不生成。
2)Extents部分,  设置Initial size
3)Space Usage部分,设置PCTFREE ,默认10 ,表示数据块可用空间低于10%以后,数据块就不允许insert。PCTUSED 表示什么情况下可以被insert,默认40%,表示
   当数据块使用空间低于40%以后,该数据块就可以再被insert。启用ASSM,就不能设置PCTUSED.
2、rowid  是一个伪列,每一条记录都有rowid伪列。
对应ORACLE10g 来说,rowid 格式:OOOOOOFFFBBBBBBRRR
OOOOOO:数据行所在的对象号
FFF   :数据行所在的相对文件号
BBBBBB:数据行所在的数据块号
RRR   :数据行所在的数据块中的行号
rowid采用64进制,即:A~Z a~z 0~9 / +  64个字符来表示。
A~Z :0~25
a~z :26~51
0~9 :52~61
/   :62
+   :63

例子 rowid = AAAM0hAAEAAAAGnAAA
SQL>select object_id from user_objects where object_name = 'BOOKS';      --对象号
SQL>select dbms_rowid.rowid_relative_fno(rowid) as "File No" from dual;  --文件号
SQL>select dbms_rowid.rowid_block_number(rowid) as "File No" from dual;  --块号
SQL>select dbms_rowid.rowid_row_number(rowid) as "File No" from dual;    --行号

3、管理普通表
1)扩展表:有时需要主动扩展表占用空间,或者将表数据分布到多个文件,将表的I/O分散到多个磁盘上。
SQL>alter table books allocate extent (size 1M datafile '/u01/app/oracel/oradata/ora10g/users02.dbf');
2)重整表  --消除币表的数据块级别的碎片。
稀疏表产生的原因:该表存在很多的insert 和 delete、
在表的segment header里面,记录了一个值,叫高水位标志(High Water Mark 简称HWM)表示当前segment 使用最后一个数据块的位置。
说明:表进行删除数据后,HWM位置不会改变,在对表进行全表扫描时,仍然要扫描到HWM为止。ORACLE10g之前使用move或者导出导入的方式进行重整表来减小WHM,如下:
SQL>alter table books move tablespace example;  --把表移到example表空间,如果没有加表空间,就在当前表对应表空间重整,重整后全表索引失效。
ORACLE 10g 可以使用shrink(收缩)对表进行收缩。
3)收缩表
条件:表所在的表空间必须使用 ASSM (自动段空间管理)
      收缩表引起数据行在不同的数据块转移,必须启用 row movement 选项
SQL>alter table t enable row movement;
收缩表语句:
SQL>alter table t shrink space compact;  --对表t只进行压缩阶段,不下降HWM
SQL>alter table t shrink space;          --对表t只进行压缩阶段,下降HWM
SQL>alter table t shrink space cascade;  --对表t只进行压缩阶段,下降HWM;同时还收缩表t相关的其他segment
说明:可以使用Segment Advisor 帮助哪些segment可以进行收缩。
4)截断表
truncate 命令是一个DDL命令,最后WHM下降到最低。
SQL>truncate table t;
注意:有些时候截断一个巨大的表要花费很长的时间,导致表长时间不能使用。再截断的时候,可以在更新完数据字典以后,不立即释放全部的数据块,但WHM已经下降到最低。
      可以在系统比较空闲分多次释放数据块,每次释放部分空间。命令如下:
SQL>truncate table t1 reuse storage;
SQL>alter table t1 deallocate unused keep 30M;  --将表t1没有用的数据块释放,释放到剩余的表所占用的空间为30M为止。
SQL>alter table t1 deallocate unused keep 15M;
SQL>alter table t1 deallocate unused keep 0M;
说明:如果其他用户已经把数据插入t1,则不会删除,只释放没有的数据块。
5)删除表
删除表属于DDL命令,只是更新数据字典的信息,ORACLE不会读取表包含的数据块信息,因此,即使表处于只读表空间里,该表也是可以被删除的。
SQL>drop table t;  
SQL>drop table t cascade constraints;
添加cascade constraints 选项,同时删除引用表 t 的外键。
6)修改或删除列
SQL>alter table t rename column to code;
SQL>alter table t drop column code;
SQL>alter table t drop column code cascade constraints;  --同时删除引用的外键
注:在删除列的过程中,oracle会消耗undo表空间,如记录很多,会消耗过多的undo表空间。
SQL>alter table t drop column code cascade constraints checkpoint 2000;
checkpoint 2000 表示每2000条记录提交一次,从而释放出undo资源。
注:在删除列的过程中,oracle会锁定表,无法对表进行DML操作,如果数据量很大,则将花费很长时间,在业务高峰期,影响严重。
SQL>alter table t set unused column code;    
SQL>select * from user_unusedd_col_tabs;        ----可以查询到失效的列。
可以先从逻辑上使该列失效,在业务低峰期在物理上删除失效的列。
SQL>alter table t drop umused columns;
SQL>alter table t drop umused columns checkpoint 2000;

4、约束 constraints
ORACLE 数据库里面,有以下5中约束:
1)非空 not null     ---本质上说,not null 属于 check : col_name is not null
2)唯一 unique
3)主键 primary key
4)外键 foreign key
5)检查 check

约束的状态:
1)enable和disable :对表进行插入或修改时,对插入或修改后的数据进行检验,判断是否违反约束。
2)validate和novalidate :是否对表里已经存在的数据进行检验,判断是否违反约束。
上面的组合存在四种状态。
SQL>alter table books enable validate constraint pk_books;
SQL>alter table books enable novalidate constraint pk_books;
SQL>alter table books rename constraint pk_books to pk_books_id;

约束校验的时机
延迟约束 deferred constraint :约束在提交的时候进行校验。
1)deferrable :说明约束是否可以被延迟,添加该选项说明可以被延迟。
2)initially deferred 或者 initially immediate:说明约束创建时候,何时校验数据。
initially deferred :提交校验。设置该选项必须设置了deferrable。
initially immediate:默认值,立即校验。
SQL>alter table sales add constraint chk_sales check(price*qty=value) deferrable initially deferred;

SQL>alter session set constraint=deferred;
当发出该语句之后,说明当前session中,对于发出的所有DML语句所涉及的表,只要这些表上约束定义了deferrable选项,这些约束全部延迟检验。


5、使用分区表,索引组织表,簇表
Oracle 10g 提供五种分区的方法
1)范围分区 Range Partition
create table t2(id number,createdate date)
  partition by range(createdate)
  (
  partition p1 values less than (to_date('2001-01-01','yyyy-mm-dd')) tablespace ts01,
  partition p2 values less than (to_date('2002-01-01','yyyy-mm-dd')) tablespace ts02,
  partition p3 values less than (to_date('2003-01-01','yyyy-mm-dd')) tablespace ts03,
  partition pmax values less than (maxvalue) tablespace ts04
  );
2)哈希分区 Hash Partition
create table t3(id number,name varchar2(10))
  partition by hash(id)
  partitions 4
  store in (ts01,ts02.ts03.ts04);
create table t3(id number,varchar2(10))
  partition by hash(id)
  (
  partition p1 tablespace ts01,
  partition p2 tablespace ts02,
  partition p3 tablespace ts03,
  partition p4 tablespace ts04
  ):
3)列表分区 List Partition
create table t4(id number,name varchar2(10),category varchar2(10))
  partition by list(category)
  (
  partition p1 values ('01','02') tablespace ts01,
  partition p2 values ('03','04') tablespace ts02,
  partition p3 values ('05','06','07') tablespace ts03,
  partition p4 values (default) tablespace ts04,
  );
4)范围哈希组合分区 Range-Hash Partition
create table t5(id,number,name varchar2(10),createdate date)
 partition by range (createdate)
  subpartition by hash (id)
   subpartitions 4 store in (ts01,ts02)
  (partition p1 values less than (to_date('2001-01-01','yyyy-mm-dd')),
  partition p2 values less than (to_date('2002-01-01','yyyy-mm-dd')),
  partition p3 values less than (to_date('2003-01-01','yyyy-mm-dd')),
  partition pmax values less than (maxvalue)
  subpartitions 2 store in (ts03) );
说明:先按createdate进行范围分区,然后再按照id进行hash分区。默认每个分区包含4个hash子分区,,这些子分区都分别在ts01和ts02里。
也是就是p1,p2,p3都是如此,但对于pmax来说,修改了默认设置,pmax有两个hash分区,都位于ts03里。
5)范围列表组合分区 Range-List Partition
create table t6(id number,name varchar2(10),category varchar2(10),createdate date)
  partition by range(createdate)
   subpartition by list (category)
  (partition p1 values less than (to_date('2001-01-01','yyyy-mm-dd')) tablespace ts01
     (subpartition p1_1 values ('01','02'),
      subpartition p1_2 values ('03','04'),
      subpartition p1_3 values (default) tablespace ts02),
   partition p2 values less than (maxvalue) tablespace ts03
     (subpartition p1_1 values ('01','02'),
      subpartition p1_2 values ('03','04'),
      subpartition p1_3 values (default) tablespace ts04)
  );


索引组织表 index organized table

linux

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 채팅 명령 및 사용 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. iOS 18에는 손실되거나 손상된 사진을 검색할 수 있는 새로운 '복구된' 앨범 기능이 추가되었습니다. Jul 18, 2024 am 05:48 AM

Apple의 최신 iOS18, iPadOS18 및 macOS Sequoia 시스템 릴리스에는 사진 애플리케이션에 중요한 기능이 추가되었습니다. 이 기능은 사용자가 다양한 이유로 손실되거나 손상된 사진과 비디오를 쉽게 복구할 수 있도록 설계되었습니다. 새로운 기능에는 사진 앱의 도구 섹션에 '복구됨'이라는 앨범이 도입되었습니다. 이 앨범은 사용자가 기기에 사진 라이브러리에 포함되지 않은 사진이나 비디오를 가지고 있을 때 자동으로 나타납니다. "복구된" 앨범의 출현은 데이터베이스 손상으로 인해 손실된 사진과 비디오, 사진 라이브러리에 올바르게 저장되지 않은 카메라 응용 프로그램 또는 사진 라이브러리를 관리하는 타사 응용 프로그램에 대한 솔루션을 제공합니다. 사용자는 몇 가지 간단한 단계만 거치면 됩니다.

PHP에서 MySQLi를 사용하여 데이터베이스 연결을 설정하는 방법에 대한 자세한 튜토리얼 PHP에서 MySQLi를 사용하여 데이터베이스 연결을 설정하는 방법에 대한 자세한 튜토리얼 Jun 04, 2024 pm 01:42 PM

MySQLi를 사용하여 PHP에서 데이터베이스 연결을 설정하는 방법: MySQLi 확장 포함(require_once) 연결 함수 생성(functionconnect_to_db) 연결 함수 호출($conn=connect_to_db()) 쿼리 실행($result=$conn->query()) 닫기 연결( $conn->close())

PHP에서 데이터베이스 연결 오류를 처리하는 방법 PHP에서 데이터베이스 연결 오류를 처리하는 방법 Jun 05, 2024 pm 02:16 PM

PHP에서 데이터베이스 연결 오류를 처리하려면 다음 단계를 사용할 수 있습니다. mysqli_connect_errno()를 사용하여 오류 코드를 얻습니다. 오류 메시지를 얻으려면 mysqli_connect_error()를 사용하십시오. 이러한 오류 메시지를 캡처하고 기록하면 데이터베이스 연결 문제를 쉽게 식별하고 해결할 수 있어 애플리케이션이 원활하게 실행될 수 있습니다.

Golang에서 데이터베이스 콜백 함수를 사용하는 방법은 무엇입니까? Golang에서 데이터베이스 콜백 함수를 사용하는 방법은 무엇입니까? Jun 03, 2024 pm 02:20 PM

Golang의 데이터베이스 콜백 기능을 사용하면 다음을 달성할 수 있습니다. 지정된 데이터베이스 작업이 완료된 후 사용자 정의 코드를 실행합니다. 추가 코드를 작성하지 않고도 별도의 함수를 통해 사용자 정의 동작을 추가할 수 있습니다. 삽입, 업데이트, 삭제, 쿼리 작업에 콜백 함수를 사용할 수 있습니다. 콜백 함수를 사용하려면 sql.Exec, sql.QueryRow, sql.Query 함수를 사용해야 합니다.

BTC Trading 앱을 설치하고 등록하는 방법은 무엇입니까? BTC Trading 앱을 설치하고 등록하는 방법은 무엇입니까? Feb 21, 2025 pm 07:09 PM

이 기사는 비트 코인 거래 응용 프로그램을 설치하고 등록하는 방법에 대한 자세한 소개를 제공합니다. 비트 코인 트레이딩 앱을 통해 사용자는 비트 코인과 같은 암호 화폐를 관리하고 거래 할 수 있습니다. 이 기사는 응용 프로그램 다운로드, 계정 작성, ID 검증 수행 및 첫 입금을 포함하여 설치 및 등록 프로세스를 단계별로 안내합니다. 이 기사의 목표는 초보자에게 명확하고 이해하기 쉬운 지침을 제공하여 비트 코인 거래 세계에 쉽게 들어가도록 도와줍니다.

JSON 데이터를 Golang의 데이터베이스에 저장하는 방법은 무엇입니까? JSON 데이터를 Golang의 데이터베이스에 저장하는 방법은 무엇입니까? Jun 06, 2024 am 11:24 AM

JSON 데이터는 gjson 라이브러리 또는 json.Unmarshal 함수를 사용하여 MySQL 데이터베이스에 저장할 수 있습니다. gjson 라이브러리는 JSON 필드를 구문 분석하는 편리한 방법을 제공하며, json.Unmarshal 함수에는 JSON 데이터를 비정렬화하기 위한 대상 유형 포인터가 필요합니다. 두 방법 모두 SQL 문을 준비하고 삽입 작업을 수행하여 데이터를 데이터베이스에 유지해야 합니다.

Go WebSocket은 데이터베이스와 어떻게 통합됩니까? Go WebSocket은 데이터베이스와 어떻게 통합됩니까? Jun 05, 2024 pm 03:18 PM

GoWebSocket을 데이터베이스와 통합하는 방법: 데이터베이스 연결 설정: 데이터베이스/sql 패키지를 사용하여 데이터베이스에 연결합니다. WebSocket 메시지를 데이터베이스에 저장: INSERT 문을 사용하여 데이터베이스에 메시지를 삽입합니다. 데이터베이스에서 WebSocket 메시지 검색: SELECT 문을 사용하여 데이터베이스에서 메시지를 검색합니다.

PHP 데이터베이스 연결 함정: 일반적인 실수와 오해를 피하세요 PHP 데이터베이스 연결 함정: 일반적인 실수와 오해를 피하세요 Jun 05, 2024 pm 10:21 PM

PHP 데이터베이스 연결 오류를 방지하려면 연결 오류를 확인하고 변수 이름을 자격 증명과 일치시키는 모범 사례를 따르십시오. 자격 증명을 하드코딩하지 않으려면 보안 저장소나 환경 변수를 사용하세요. SQL 주입을 방지하기 위해 사용 후 연결을 닫고 준비된 문 또는 바인딩된 매개 변수를 사용합니다.

See all articles