Oracle管理磁盘空间和资源

1.可恢复的空间分配

1.1 了解可恢复的空间分配

一般情况,我们发出一个大型数据库操作,比如创建大表索引,如果表空间不足,数据库最终会终止操作。
而可恢复的空间分配功能可以使得这类操作挂起,等待DBA去处理,等成功处理之后大型数据库操作自动恢复,这样就避免了这类棘手问题,节省了时间。

1.2 配置可恢复的空间分配

相关参数和用法:

--参数resumable_timeout
show parameter resumable_timeout
--实例级别启用resumable
alter system set resumable_timeout = 7200;
--实例级别禁用resumable
alter system set resumable_timeout = 0;
--赋权resumable权限给某个用户
grant resumable to jingyu;

--会话级别修改
--启用resumable
alter session enable resumable;
--设定挂起时长
alter session enable resumable timeout 144000;
--设定名称
alter session enable resumable name ‘Create Big Index‘;
--禁用resumable
alter session disable resumable;

--查询DBA_RESUMABLE了解挂起语句的详细信息
set linesize 140
col name for a40
col error_msg for a30
select USER_ID, SESSION_ID, INSTANCE_ID, STATUS, NAME, ERROR_MSG from dba_resumable;

实验-配置使用当前会话的可恢复的空间分配:

--如果表空间不足,创建表会直接失败
SQL> show user
USER is "JINGYU"
SQL> create table t_s1 as select * from dba_objects;
create table t_s1 as select * from dba_objects
*
ERROR at line 1:
ORA-01652: unable to extend temp segment by 128 in tablespace DBS_D_JINGYU

--如果启用session的resumable,再创建表就会挂起操作
SQL> alter session enable resumable timeout 7200;
Session altered.
SQL> create table t_s1 as select * from dba_objects;
...这里长时间挂起
--此时我们从告警日志中可以看到对应的日志信息,操作被挂起:
Wed Jan 13 09:51:55 2016
statement in resumable session ‘User JINGYU(99), Session 62, Instance 1‘ was suspended due to
    ORA-01652: unable to extend temp segment by 128 in tablespace DBS_D_JINGYU
--扩展表空间
SQL> alter tablespace DBS_D_JINGYU add datafile size 30M;
Tablespace altered.
--此时告警日志信息可以看到操作继续执行:
Wed Jan 13 10:01:12 2016
statement in resumable session ‘User JINGYU(99), Session 62, Instance 1‘ was resumed
Completed: alter tablespace DBS_D_JINGYU add datafile size 30M autoextend on
--再去看刚刚挂起的建表语句已经执行成功
SQL> create table t_s1 as select * from dba_objects;
Table created.
--禁用当前会话的resumable
alter session disable resumable;

1.3 使用可恢复的空间分配功能

--触发器基本结构如下,需要根据具体需求来完善
create or replace trigger resumable_notify
  after suspend on database
declare
  -- variables, if required
begin
  -- check DBA_RESUMABLE for user ID, type of
  -- object, then send e-mail
  dbms_resumable.space_error_info(. . .);
  if object_type = ‘TABLE‘ and object_owner = ‘HR‘ then
    -- give DBA 2 hours to resolve
    dbms_resumable.set_timeout(7200);
    utl_mail.send(‘[email protected]‘,. . .);
  else
    dbms_resumable.abort(. . .);
  end if;
end;

2.可移动表空间

使用Data Pump导出表空间中对象的元数据,将组成表空间的数据文件复制到目的数据库,然后把表空间的元数据导入到目的数据库中。

2.1 配置可移动表空间

在平台间传输数据,源平台和目的平台必须是Oracle支持的平台列表中的成员。

2.1.1 确定兼容性需求

Oracle数据库的功能兼容性由COMPATIBLE初始化参数进行控制,此参数启用或禁用数据库中的某些功能。创建可移动表空间集合时,Oracle将确定目标数据库的最低兼容性级别,并将相应值存储在可移动数据集的元数据中。从Oracle Database 11g开始,不管对于哪种目标平台,始终可以将表空间移动到拥有相同或更高兼容性级别的另一个数据库中。
另外,两个数据库必须使用相同的字符集。

2.1.2 确定字节序要求

--查询可移动表空间的所有支持平台及其ENDIAN_FORMAT:
SQL> select platform_id, platform_name, endian_format from v$transportable_platform order by 3,1;

PLATFORM_ID PLATFORM_NAME                            ENDIAN_FORMAT
----------- ---------------------------------------- ------------------------------
          1 Solaris[tm] OE (32-bit)                  Big
          2 Solaris[tm] OE (64-bit)                  Big
          3 HP-UX (64-bit)                           Big
          4 HP-UX IA (64-bit)                        Big
          6 AIX-Based Systems (64-bit)               Big
          9 IBM zSeries Based Linux                  Big
         16 Apple Mac OS                             Big
         18 IBM Power Based Linux                    Big
          5 HP Tru64 UNIX                            Little
          7 Microsoft Windows IA (32-bit)            Little
          8 Microsoft Windows IA (64-bit)            Little
         10 Linux IA (32-bit)                        Little
         11 Linux IA (64-bit)                        Little
         12 Microsoft Windows x86 64-bit             Little
         13 Linux x86 64-bit                         Little
         15 HP Open VMS                              Little
         17 Solaris Operating System (x86)           Little
         19 HP IA Open VMS                           Little
         20 Solaris Operating System (x86-64)        Little
         21 Apple Mac OS (x86-64)                    Little

20 rows selected.

--查询当前平台的字节序格式
select PLATFORM_NAME my_platform, ENDIAN_FORMAT my_endian_format from v$transportable_platform join v$database using(platform_name);

SQL> select PLATFORM_NAME my_platform, ENDIAN_FORMAT my_endian_format
  2  from v$transportable_platform
  3  join v$database using(platform_name);

MY_PLATFORM                    MY_ENDIAN_FORMAT
------------------------------ ------------------------------------------
Linux x86 64-bit               Little

2.2 传输表空间

传输表空间核心步骤:
1)源数据库上的表空间设为只读模式;
2)源数据库上提取表空间元数据;
3)如果源和目的的字节序格式不同,转换表空间内容;
4)拷贝表空间数据文件以及表空间元数据到目的数据库;
5)目的数据库导入表空间元数据;
6)源数据库和目的数据库的表空间设置为读写模式。

--用户的默认表空间和默认临时表空间
select username, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE from user_users;
--用户用到的表空间
select tablespace_name from user_tables union
select tablespace_name from user_tab_partitions union
select tablespace_name from user_indexes union
select tablespace_name from user_ind_partitions;

2.2.1 使用EM传输表空间

web图形化界面操作,
1.点击数据移动 -> 传输表空间 -> 生成可传输的表空间集,然后按提示一步步生成;
2.在目的地数据库 点击数据移动 -> 传输表空间 -> 集成现有可传输表空间集,然后按提示一步步集成在目的数据库中。
我这里实验在生成可传输的表空间集时报错:ORA-02097,ORA-19529。

--根据MOS文档:Received ORA-19529 Attempting To Do A Transportable Tablespace Export Through OEM (文档 ID 2073402.1)
ORA-02097: parameter cannot be modified because specified value is invalid
ORA-19529: Pattern /home/kqualls/transport/epsdev/o1_mf_ekb_cons_b6qc1hbm_.dbf in initialization parameter db_file_name_convert has an Oracle Managed Files file name.
--原因:
EM Cloud Control 12c does not support conversion of OMF files. Currently only user managed files are supported using the EM feature.   There is an enhancement logged, Bug 21233808 - Cloud Control TTS generates invalid db_file_name_convert command ORA-02097
--解决:
Create RMAN Job in EM Cloud Control Job system, enter command line script commands there.
Using the RMAN Job in the EM Job system will allow the process to use the database parameters to convert the datafiles rather than using the EM perl scripts that don‘t support OMF files.

PS:即使没有问题,一般生产环境传输表空间也不采用EM,因为很多生产环境都没有安装EM,或者复杂的网络环境因素导致不方便使用EM。还是手动使用SQL传输表空间更加靠谱。

2.2.2 使用SQL传输表空间

参考:

3.Oracle段收缩功能

参考:

4.Oracle数据库资源管理

参考:

Reference

  • OCP 认证考试指南 (1Z0-053)[M]. 清华大学出版社, 2010.
时间: 2024-11-07 02:18:36

Oracle管理磁盘空间和资源的相关文章

oracle所在磁盘空间不足导致了数据库异常

oracle所在磁盘空间不足导致了数据库异常.需要减小数据文件的大小来解决. 1.检查数据文件的名称和编号 select file#,name from v$datafile; 2.看哪个数据文件所占的空间最大,根据该数据文件的编号查看该数据文件的最大数据块数 select max(block_id) from dba_extents where file_id=8; 查询结果 3.计算该表空间的实际占用空间.(不是物理文件的大小) 查看每个数据块的大小 show parameter db_bl

oracle服务器硬盘磁盘空间满了

问题描述:oracle服务器硬盘磁盘空间满了,没有空间写入数据: 解决思路: a.服务器是虚拟机还是实体机? 虚拟机,->物理机上有空间直接给它扩容,再给数据库的相关表空间添加文件就可: 实体机,->确定是否还有oracle收缩磁盘硬盘插槽,能新增物理硬盘,买+接入: b.删数据以及降低高水位: 通常思路是:找占用磁盘最大的表空间TS_1,找该表空间下巨大的表tableA,删除历史数据,降低高水位(table move),缩小表空间文件,腾出空间: 1.查询 表空间各文件 --找出占用磁盘最大

ORACLE - 管理表空间和数据文件

ORACLE表空间是一个逻辑分区,一个数据文件只能属于一个表空间,一个表空间可以拥有多个数据文件. 一般情况下,如果一个实例分配给多个应用使用,需要创建不同的表空间,每个用户使用自己的表空间. 一.表空间的创建与授权 首先查看表空间的使用情况: select tablespace_name,sum(bytes)/1024/1024 as MB from dba_data_files group by tablespace_name; ---剩余容量(在固定大小的情况下) select table

Oracle 创建表空间和用户

一.在Windows系统下, 请先点击“开始”,然后点“运行”,输入cmd并点击“确定”,打开命令行窗口输入以下命令: sqlplus   /nolog 回车后,将出现提示符 SQL> 这时输入       conn   /   as   sysdba 一般即可登录,如果失败的话,可以试一下用conn    sys/sys用户的密码   as sysdba来重试一下 接下来,我们看看您当前的数据库文件一般都是放在哪里的: select    name    from    v$datafile;

oracle数据库-表空间基础语法及举例

数据库的存储结构 数据库主要用于存储和检索相关的信息,Oracle数据库包含逻辑结构和物理结构. 物理结构是指现实存储单元,由一组文件组成如数据文件.日志文件.控制文件. 数据文件:用于存储数据的文件.如表,索引和数据等都存储在数据文件中. 日志文件:用于记录对数据库的修改信息. 控制文件:用于存储 Oracle实例信息.数据文件信息和日志文件信息的二进制文件.由于存储了数据文件和日志文件的信息,所以 Oracle启动时必须访问呢控制文件. 逻辑结构式是指数据概念性的组织.包括  表空间.表.行

如何清理Docker占用的磁盘空间?

摘要:用了Docker,好处挺多的,但是有一个不大不小的问题,它会一不小心占用太多磁盘,这就意味着我们必须及时清理. 作为一个有信仰的技术公司,我们Fundebug的后台采用了酷炫的全Docker化架构,所有服务,包括数据库都运行在Docker里面.这样做当然不是为了炫技,看得清楚的好处还是不少的: 所有服务器的配置都非常简单,只安装了Docker,这样新增服务器的时候要简单很多. 可以非常方便地在服务器之间移动各种服务,下载Docker镜像就可以运行,不需要手动配置运行环境. 开发/测试环境与

Oracle磁盘空间使用统计

对于大型数据库,Oracle占用的磁盘空间非常大,掌握数据库中那些用户.表占用了多杀磁盘空间,以及增长情况,可以方便日后对磁盘系统进行维护和扩充. 对Oracle磁盘空间使用情况,可以分为按照表空间.用户或者表来进行统计. (一).表空间 计算表空间的剩余大小 select A.TABLESPACE_NAME,A.BYTES/(1024*1024*1024) "SPACE(G)", C.BYTES/(1024*1024) "FREE SPACE(M)",(C.BYT

Oracle之表空间、索引、管理权限及角色

Oracle表空间 表空间是数据库的逻辑组成部分,从物理上讲,数据库数据存放在数据文件中 从逻辑上讲,数据库则是存放在表空间中,表空间由一个或多个数据文件组成 数据库的逻辑结构 oracle中逻辑结构包括表空间.段.区和块 说明一下数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而 区又是由oracle块构成的这样的一种结构,可以提高数据的效率 表空间用于从逻辑上组织数据库的数据.数据库逻辑上是由一个或是多个表空间组成的 通过表空间可以达到以下作用: 1.控制数据库占用的磁盘空间 2

十四、oracle 数据库管理--管理表空间和数据文件

一.概念表空间是数据库的逻辑组成部分.从物理上讲,数据库数据存放在数据文件中:从逻辑上讲,数据库数据则是存放在表空间中,表空间由一个或多个数据文件组成. 二.数据库的逻辑结构oracle中逻辑结构包括表空间.段.区和块.说明一下数据库由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由oracle块构成的这样的一种结构,可以提高数据库的效率. 三.表空间1.概念表空间用于从逻辑上组织数据库的数据.数据库逻辑上是由一个或是多个表空间组成的.通过表空间可以达到以下作用:1).控制数据库占