oracle 10g如何移动系统表空间

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 10g如何移动系统表空间相关的知识,希望对你有一定的参考价值。

1.单表转移表空间
场景:有表user存放在表空间oldspace下,需把表user移动到表空间new_space下

执行语句:
alter table user move tablespace new_space;
commit;

2.用户scott下的所有表都转移至表空间new_space下
select \'alter table\'||table_name||\'move tablespace new_space;commit;\'
from user_tables where owner=\'scott\'

但是表user被移动到表空间new_space后,表user上的索引是不是自动转移到表空间new_space
3.索引转移表空间,例如,user表上的索引idx_user
alter index idx_user rebuild tablespace new_space
4.用户scott下的所有索引都转移至表空间new_space下
select \'alter index\'||index_name||\'rebuild tablespace new_space;commit;\'
from user_indexs where owner=\'scott\'
参考技术A 表空间:是数据库里一个逻辑存储结构,其对应物理结构是数据文件,一个表空间可以包含多个数据文件,但是一个数据文件只能属于一个表空间。
换句话说:移动表空间其实就是移动表空间下的数据文件。

离线移动
1、sqlplus / as sysdba;
2、shutdown immediate;
3、startup mount;
4、alter database file 'XXX' to 'XXX';
(这里的‘XXX’是数据文件所在位置,可通过select name from v$datafile;查看数据文件路径)
5、alter database open;

在线移动(无法移动system表空间、临时表空间的数据文件)
1、sqlplus / as sysdba
2、alter tablespace XXX offline; (这里的‘XXX’是表空间名)
3、alter tablespace XXX rename datafile 'XXX' to 'XXX';
4、alter tablespace XXX online;

Oracle

Oracle建表(create table)

  1. Oracle表是Oracle数据库的核心,是存储数据的逻辑基础。
  2. Oracle表是一个二维的数据结构,有列字段和对应列的数据构成一个数据存储的结构。可以看错行和列的二维表,列代表着Oracle字段(column),行代表着一行数据(即一条数据记录)。

Oracle字段数据类型

  1. VARCHAR2(length):字符串类型:存储可变的长度的字符串,length:是字符串的最大长度,默认不填的时候是1,最大长度不超过4000。
  2. CHAR(length):字符串类型:存储固定长度的字符串,length:字符串的固定长度大小,默认是1,最大长度不超过2000。
  3. NUMBER(a,b):数值类型:存储数值类型,可以存整数,也可以存浮点型
    a代表数值的最大位数:包含小数位和小数点,b代表小数的位数
  4. DATA时间类型:存储的是日期和时间,包括年、月、日、时、分、秒
  5. TIMESTAMP:时间类型:存储的不仅是日期和时间,还包含了时区
  6. CLOB:大字段类型:存储的是大的文本,比如:非结构化的txt文本,字段大于4000长度的字符串。
  7. BLOB:二进制类型:存储的是二进制对象,比如图片、视频、声音等转换过来的二进制对象

create table语句

  1. Oracle数据库建表是通过create table命令来执行的
  2. 在student用户下创建一个stuinfo(学生信息表)来讲解create table 命令的使用。
create table STUDENT.stuinfo
(
  stuid      varchar2(11) not null,--学号:'S'+班号(7位数)+学生序号(3位数)(1)
  stuname    varchar2(50) not null,--学生姓名
  sex        char(1) not null,--性别
  age        number(2) not null,--年龄
  classno    varchar2(7) not null,--班号:'C'+年级(4位数)+班级序号(2位数)
  stuaddress varchar2(100) default '地址未录入',--地址 (2)
  grade      char(4) not null,--年级
  enroldate  date,--入学时间
  idnumber   varchar2(18) default '身份证未采集' not null--身份证
)

Oracle查询(select)

  1. Oracle表数据进行查询是数据查询语言(DQL),利用SELECT命令从表中进行提取数据
  2. select 命令格式: select *|列名|表达式 from 表名 where 条件 order by 列名

Oracle插入(insert into)

  1. insert 命令结构: insert into 表名(列名1,列名2,列名3.....)values(值1,值2,值3.....);
  2. 列名可以省略,当列名不填时,默认的是表中的所有列,列的顺序是按照建表的顺序进行排列的。
  3. 列名的数量和值的数量要一致,并且值的类型要和列的类型一一对应。
  4. 当表当中某些字段设置了某些约束的情况下,必须按照字段的约束来进行该值的插入

Oracle更新(update)

  1. Oracle对表数据的更新是使用update命令来执行的。
  2. update命令结构:update 表名 set 列名1=值1,列名2=值2,列名3=值3..... where 条件

Oracle删除(delete)

  1. Oracle中对表数据的删除是利用delete命令进行的
  2. delete命令结构:delete from 表名 where 条件
  3. 当delete from不加where条件时,表示是把表中的数据全部删除。
  4. truncate命令:truncate命令也是数据删除命令,
  5. truncate命令是直接把Oracle表数据一次删除的命令,truncate命令是一个DDL命令,不同于delete是DML命令。
  6. truncate命令结构:truncate table 表名;

truncate和delete都能删除表中的数据,他们的区别:

  1. TRUNCATE 是 DDL 命令,命令执行完就提交,删除的数据不能恢复; DELETE 命令是 DML 命令,命令执行完需提交后才能生效,删除后的数据可以通过日志文件恢复。
  2. 如果表中的数据量较大,TRUNCATE的速度比DELETE速度快很多。
  3. truncate删除将重新设置表索引的初始大小,而delete不能。
  4. delete能够触发表上相关的delete触发器,而truncate则不会触发。
  5. delete删除的原理是一次一条从表中删除数据,并将删除操作当做事物记录在数据库的日志当中,以便进行数据回滚。而truncate是一次性进行数据页的删除,因此执行速度快,但是不能回滚。
  6. truncate命令是属于DDL命令,一次性删除表中所有数据,并且数据不能恢复,truncate命令慎用。

以上是关于oracle 10g如何移动系统表空间的主要内容,如果未能解决你的问题,请参考以下文章

操作系统是linux,数据库是oracle,如何给表空间加一个数据文件,数据文件为10G,该怎么办?

Oracle pl sql 10g - 将一组行从表移动到具有相同结构的历史表

oracle如何移动表空间?

oracle10g数据库如何扩充表空间

如何在oracle10G中创建表空间

oracle 11g 如何将表从一个表空间移动到另一个表空间