Oracle数据文件收缩实例

Oracle数据文件收缩实例数据文件的作用HWM的基本概念查看数据文件的使用情况包括内容:数据文件大小,已经used空间,free空间,hwm信息select/*+ ordered use_hash(a,b,c) */a.file_id,a.file_name,a.filesize,b.freesize,(a.filesize-b.freesize) usedsize,c.hwmsize,c.hwmsize - (a.filesize-b.freesize) unsedsize_belowhwm,a.filesize - c.hwmsize canshrinksizefrom(select file_id,file_name,round(bytes/1024/1024) filesize from dba_data_files) a,(select file_id,round(sum(dfs.bytes)/1024/1024) freesize from dba_free_space dfs group by file_id) b,(select file_id,round(max(block_id)*8/1024) HWMsize from dba_extentsgroup by file_id) cwhere a.file_id = b.file_idand a.file_id = c.file_idorder by unsedsize_belowhwm desc;结果说明:建立测试表空间SQL> create tablespace HWM datafile ‘/oradata/HWM01.dbf’ size 5000M; Tablespace created;SQL> alter tablespace HWM add datafile '/oradata/HWM02.dbf' size 5000M; Tablespace alteredmove表空间的long类型Alter index index_name rebuild;Alter index pk_name rebuild;如果我们需要move索引到另外一个表空间,则需要使用rebuildAlter index index_name rebuild tablespace tbs_name;Alter index pk_name rebuild tablespace tbs_name;select ds.tablespace_name,'alter table '||ds.owner||'.'||ds.segment_name||' move tablespace HWM;'from dba_segments dswhere ds.tablespace_name not in('SYSTEM','CWMLITE','EXAMPLE','UNDOTBS2', 'HWM','XDB','WKSYS','CTXSYS','ODM_MTR','USERS','DRSYS','HTEC','HAPPYTREE')and ds.segment_type = 'TABLE';SQL> alter table ODS.SM_PRODUCT_SPEC_SHOW move tablespace HWM;Table alteredSQL> alter table DW.D_PRODUCT_INFO move tablespace HWM;Table alteredselect ds.tablespace_name,'alter INDEX '||ds.owner||'.'||ds.segment_name||' rebuild tablespace HWM;'from dba_segments dswhere ds.tablespace_name not in('SYSTEM','CWMLITE','EXAMPLE','UNDOTBS2', 'HWM','XDB','WKSYS','CTXSYS','ODM_MTR','USERS','DRSYS','HTEC','HAPPYTREE')and ds.segment_type = 'INDEX'…SQL> alter INDEX CTL.IDX_TL_ADJUSTMENT_CONFIRMDATE rebuild tablespace HWM;Index alteredSQL> alter INDEX CTL.IDX_TL_ADJUSTMENT_ORDER rebuild tablespace HWM;Index altered…move表空间下的分区table及index和普通表一样,索引也会失效,区别的仅仅是语法而已。

分区表move基本语法如果是单级分区,则使用关键字partition,如果是多级分区,则使用subpartition替代partition。

如果分区或分区索引比较大,可以使用并行move或rebuild,parallel(degree 2)。

重建全局索引Alter index global_index rebuild;或Alter index global_index rebuild tablespace tbs_name;重建局部索引Alter table tab_name modify partition partition_name rebuild unusable local indexes;或Alter index local_index_name rebuild partition partition_name tablespace tbs_name;Move分区表select cnamefrom (select rownum rm,'alter table '||ds.owner||'.'||ds.segment_name||' move partition'||ds.partition_name||' tablespace HWM;' cnamefrom dba_segments dswhere ds.tablespace_name not in('SYSTEM','CWMLITE','EXAMPLE','UNDOTBS2', 'HWM','XDB','WKSYS','CTXSYS','ODM_MTR','USERS','DRSYS','HTEC','HAPPYTREE')and ds.segment_type = 'TABLE PARTITION') cwhere rm between1and100;循环执行上述语句,直到选不出结果。

SQL> alter table ODS.CR_PS_INVENTORY_ITEM move partitionCR_PS_INVENTORY_ITEM_P070603 tablespace HWM;Table alteredSQL> alter table ODS.CR_PS_INVENTORY_ITEM move partitionCR_PS_INVENTORY_ITEM_P070604 tablespace HWM;Table altered重建全局索引Oracle的全局索引也存储在dba_segments中,并以index标志,而且其重建方式跟普通索引一致,所以在执行忘回导入的时候需要按照move 普通表;move 分区表;move全局索引;move分区索引;move lob对象的顺序进行。

重建分区索引视图dba_part_indexes存储分区表的本地索引,查询发现当前系统中不存在本地索引,可以忽略。

select * from dba_part_indexes t where t.owner not in ('SYSTEM','SH')move表空间下的LOB类型在建立含有Lob字典的表时,oracle会自动为Lob字段建立两个单独的segment,一个用来存放数据(segment_type=LOBSEGMENT),另一个用来存放索引(segment_type=LOBINDEX)。

默认他们会存储在和表一起的表空间。

我们对表move时,LOB类型字段和该字段索引不会跟着move,必须使用单据的语句来执行该字段的move,语法如下:Alter table t321 move tablespace HWM;Later table t321 move lob(en) store as (tablespace HWM);select'alter table '||dtc.owner||'.'||dtc.TABLE_NAME||' move lob('||dtc.COLUMN_NAME||') store as(tablespace HWM);'from dba_tab_columns dtcwhere dtc.OWNER in('CTL','DW','RPT','OD','ODS','TODS','FBI','DP22','DP23','TCLKING')and dtc.DATA_TYPE like'%LOB'SQL> alter table DP22.D_KPI move lob(KPIFORM) store as(tablespace HWM); Table alteredSQL> alter table DP22.D_KPI move lob(KPIFORMDSPN) store as(tablespace HWM);Table altered执行完上述操作步骤后,我们检查tablespace的空间使用情况可以发现,所有相关数据文件的hwm都已经变为0,也就是说所有的空间都已经变为未分配状态。

合集下载

数据库表空间收缩之pg_squeeze,pg_repack

数据库表空间收缩之pg_squeeze,pg_repack

数据库表空间收缩之pg_squeeze,pg_repack数据库表空间收缩之pg_squeeze,pg_repack⽬录下半年⼀直忙于NP的sybase,通过⼤家的共同努⼒,NP年底⽐较稳定。

很久没有弄过pg相关的知识了,最近经常看到有⼈问如何⽤⼯具⾃动清理pg的坏元组。

除了我们经常⼿动使⽤vacuum之外,⽣产环境还有两个⽐较常⽤的⼯具⼀个是pg_squeeze,另外⼀个是pg_repackpg_squeeze1.2原理pg_squeeze是⼀个扩展,它从表中删除未使⽤的空间,并且可以选择根据特定索引对元组进⾏排序,⼀般当⼀个表膨胀时⼀般使⽤vacuum full或者cluster进⾏表重建,在这⼀过程中会加排他锁,导致该表⽆法进⾏读写,只有等整个过程完成后才可以进⾏正常使⽤优点相⽐pg_repack或者pg_reorg,pg_squeeze不需要建触发器,所以在重组时对原表的DML⼏乎没有性能影响。

pg_squeeze⽀持⾃动重组,可以设置定时清理时间以及根据空闲空间⽐例来进⾏清理表。

该过程会⾃动启动worker进程,将数据复制到重组表,然后加锁,切换filenode。

安装1、下载安装包后,解压后修改MakeFile,在MakeFile中加⼊pg_configPG_CONFIG =/home/thunisoft5/arterybase/5.0/bin/pg_config2、安装make && make install3、修改postgresql.conf配置⽂件wal_level = logicalmax_replication_slots = 1 # ⼤于等于1shared_preload_libraries = 'pg_squeeze'4、重启数据库使⽤1、创建扩展postgres=# create extension pg_squeeze;CREATE EXTENSIONpostgres=# \dxList of installed extensionsName | Version | Schema | Description------------+---------+------------+------------------------------------------------pg_squeeze | 1.2 | squeeze | A tool to remove unused space from a relation.plpgsql | 1.0 | pg_catalog | PL/pgSQL procedural language(2 rows)2、安装完成后会有⼀个对应的系统表postgres=# \d squeeze.tablesTable "squeeze.tables"Column | Type | Collation | Nullable | Default------------------+-----------------------+-----------+----------+--------------------------------------------id | integer | | not null | nextval('squeeze.tables_id_seq'::regclass)tabschema | name | | not null |tabname | name | | not null |clustering_index | name | | |rel_tablespace | name | | |ind_tablespaces | name[] | | |schedule | time with time zone[] | | not null |free_space_extra | integer | | not null | 50min_size | real | | not null | 8vacuum_max_age | interval | | not null | '01:00:00'::intervalmax_retry | integer | | not null | 0skip_analyze | boolean | | not null | falseIndexes:"tables_pkey" PRIMARY KEY, btree (id)"tables_tabschema_tabname_key" UNIQUE CONSTRAINT, btree (tabschema, tabname)Check constraints:"tables_free_space_extra_check" CHECK (free_space_extra >= 0 AND free_space_extra < 100)"tables_min_size_check" CHECK (min_size > 0.0::double precision)Referenced by:TABLE "squeeze.tables_internal" CONSTRAINT "tables_internal_table_id_fkey" FOREIGN KEY (table_id) REFERENCES squeeze.tables(id) ON DELETE CASCADETABLE "squeeze.tasks" CONSTRAINT "tasks_table_id_fkey" FOREIGN KEY (table_id) REFERENCES squeeze.tables(id) ON DELETE CASCADETriggers:tables_internal_trig AFTER INSERT ON squeeze.tables FOR EACH ROW EXECUTE PROCEDURE squeeze.tables_internal_trig_func()squeeze.tables表字段说明tabschema:表的模式名。

oracle回收表空间的几种方法

oracle回收表空间的几种方法

oracle回收表空间的几种方法在Oracle数据库中,表空间是用来存储表、索引和其他数据库对象的逻辑存储单元。

随着数据库的使用,表空间中的数据会增长,导致表空间的碎片化和浪费。

为了解决这个问题,需要进行表空间的回收。

本文将介绍Oracle回收表空间的几种方法。

1. 使用ALTER TABLESPACE语句收缩表空间ALTER TABLESPACE语句可以用来收缩表空间,将碎片化的空间合并为连续的空间,从而减少空间的浪费。

语法如下:```ALTER TABLESPACE tablespace_name SHRINK SPACE;```其中,tablespace_name是要回收的表空间的名称。

执行该语句后,Oracle会自动将碎片化的空间合并,从而减少空间的浪费。

2. 使用ALTER TABLESPACE语句修改表空间的大小如果表空间中存在过多的未使用空间,可以通过修改表空间的大小来回收空间。

可以使用ALTER TABLESPACE语句来修改表空间的大小。

语法如下:```ALTER TABLESPACE tablespace_name RESIZE new_size;```其中,tablespace_name是要修改大小的表空间的名称,new_size是新的表空间大小。

执行该语句后,Oracle会将表空间的大小修改为新的大小,从而回收未使用的空间。

3. 使用REORGANIZE TABLE语句重建表在表空间中存在大量碎片化的数据时,可以使用REORGANIZE TABLE语句来重建表,从而回收空间。

语法如下:```ALTER TABLE table_name MOVE TABLESPACE tablespace_name;```其中,table_name是要重建的表的名称,tablespace_name是目标表空间的名称。

执行该语句后,Oracle会将表重建到目标表空间中,从而回收空间。

4. 使用EXPORT和IMPORT工具导出和导入表数据如果表空间中存在大量未使用的空间,可以使用EXPORT和IMPORT工具将表数据导出到一个新的表空间中,然后再导入回原来的表空间,从而回收空间。

oracle 压缩表语句

oracle 压缩表语句

oracle 压缩表语句(实用版)目录1.Oracle 压缩表语句概述2.Oracle 压缩表语句的使用方法3.Oracle 压缩表语句的优点4.Oracle 压缩表语句的注意事项正文【Oracle 压缩表语句概述】Oracle 压缩表语句是一种在 Oracle 数据库中对表进行压缩的技术,可以有效地减少表占用的存储空间,提高数据库性能。

通过使用压缩表语句,可以将表中的数据进行压缩,从而节省磁盘空间,降低 I/O 操作的次数,提高查询和写入操作的效率。

【Oracle 压缩表语句的使用方法】在 Oracle 数据库中,可以使用 ALTER TABLE 语句对表进行压缩。

具体的使用方法如下:```ALTER TABLE <表名> COMPRESS;```在使用压缩表语句时,需要确保表空间中有足够的空间来存储压缩后的数据,否则压缩操作将失败。

此外,压缩表语句只能用于普通表(non-clustered table),不能用于分区表(partitioned table)和物化视图(materialized view)。

【Oracle 压缩表语句的优点】1.节省存储空间:压缩表语句可以有效地减少表占用的磁盘空间,从而降低数据库的存储成本。

2.提高查询性能:压缩表可以减少 I/O 操作的次数,从而提高查询操作的效率。

3.降低维护成本:压缩表可以减少数据库管理员进行数据维护的工作量,提高工作效率。

【Oracle 压缩表语句的注意事项】1.在使用压缩表语句时,需要确保表空间中有足够的空间来存储压缩后的数据。

2.压缩表语句只能用于普通表,不能用于分区表和物化视图。

集群数据库 收缩日志

集群数据库 收缩日志

集群数据库收缩日志
收缩日志是指在集群数据库中对日志文件进行整理和压缩,以释放空间并提高性能。

在集群数据库中,日志文件记录了数据库的操作和变化,随着时间的推移,日志文件可能会变得庞大,占用大量存储空间,影响数据库性能。

因此,收缩日志是一种管理和优化数据库的重要操作。

从技术角度来看,收缩日志可以通过数据库管理系统提供的特定命令或工具来实现。

在SQL Server中,可以使用DBCC SHRINKFILE命令来收缩日志文件,而在Oracle数据库中,可以使用ALTER DATABASE命令来收缩日志文件。

这些命令通常会重新组织日志文件的物理存储结构,删除不再需要的空间,并将文件大小缩小到合适的水平。

另外,收缩日志也需要考虑到数据库的运行状态和业务需求。

在执行收缩日志操作之前,需要确保数据库没有活动的事务或长时间运行的查询,以免影响数据库的正常运行。

此外,还需要评估数据库的日志使用情况和备份策略,以确定何时以及如何执行收缩日志操作,以避免对数据库的正常运行和数据完整性造成影响。

在实际操作中,收缩日志也需要注意一些潜在的风险和注意事项。

过于频繁地收缩日志可能会导致日志文件的不断增长和碎片化,影响数据库性能。

因此,需要根据实际情况和最佳实践来制定合适
的收缩日志策略,以保证数据库的稳定和高效运行。

综上所述,收缩日志是集群数据库管理中的重要操作,通过合
理的技术手段和策略,可以有效地管理和优化数据库的日志文件,
提高数据库性能和稳定性。

Oracle案例11——Oracle表空间数据库文件收缩

Oracle案例11——Oracle表空间数据库文件收缩

Oracle案例11——Oracle表空间数据库⽂件收缩我们经常会遇到数据库磁盘空间爆满的问题,或由于归档⽇志突增、或由于数据⽂件过多、⼤导致磁盘使⽤紧俏。

这⾥主要说的场景是磁盘空间本⾝很⼤,但表空间对应的数据⽂件初始化的时候就直接顶满了磁盘空间,导致经常收到磁盘空间满的报警。

⼀、错误信息告警内容如下:【发现异常】地产客储系统数据库Oracle_192.168.xx.xx,192.168.xx.xx,数据库customer,连接错误,0 ORA-00257: archiver error. Connect internal only, until freed.【发⽣时间】2018.07.0409:12:21⼆、错误原因上述错误⼀看⼤致就知道是由于磁盘空间不⾜,导致归档⽆法完成所致,我们只需要清理⾜够的磁盘空间即可。

但在磁盘清理的时候发现磁盘空间本⾝可清理的不多,被很多很⼤的数据⽂件占⽤,⽽实际使⽤的segment⼤⼩总共不⾜400G,磁盘空间本⾝1T,所以我们可以通过收缩数据⽂件的⽅式回收磁盘空间。

数据⽂件初始化⽅式:1.我们创建表空间⼀般有两种⽅式初始化其数据⽂件,即指定初始⼤⼩为32G(很⼤的值)或指定初始⼤⼩为100M(很⼩的值)然后通过⾃动扩展⽅式慢慢按需增长。

2.第⼀种初始数据⽂件⽅法坏处就是开始不管你⽤不⽤到那么⼤,都会占⽤这么⼤的磁盘空间(这种数据迁移的时候可以使⽤)。

第⼆种初始化⽅法按需增长,⽐较好的监控实际使⽤磁盘空间,所以推荐初始值很⼩,使⽤⾃动扩展慢慢增长的⽅式。

三、处理步骤1.查看磁盘空间⼤⼩2.查看数据库表空间⼤⼩#!/bin/bashsqlplus -S /nolog <<EOFconn /as sysdba;set echo off heading on underline on;column inst_num heading "Inst Num" new_value inst_num format 99999;column inst_name heading "Instance" new_value inst_name format a12;column db_name heading "DB Name" new_value db_name format a12;column dbid heading "DB Id" new_value dbid format 9999999999 just c;promptprompt Current Instanceprompt ~~~~~~~~~~~~~~~~select d.dbid dbid, db_name, i.instance_number inst_num, i.instance_name inst_namefrom v\$database d,v\$instance i;set term on feedback off lines 130 pagesize 999 tab off trims oncolumn MB format 999,999,999 heading "Total MB"column free format 9,999,999 heading "Free MB"column used format 99,999,999 heading "Used MB"column Largest format 999,999 heading "LrgstMB"column tablespace_name format a20 heading "Tablespace"column status format a3 truncatedcolumn max_extents format 99999999999 heading "MaxExt"col extent_management for a1 trunc head "M"col allocation_type for a1 trunc head "A"col Ext_Size for a4 trunc head "Init"column pfree format a3 trunc heading "%Fr"break on reportcompute sum of MB on reportcompute sum of free on reportcompute sum of used on reportselectd.tablespace_name,decode(d.status,'ONLINE', 'OLN','READ ONLY', 'R/O',d.status) status,d.extent_management,decode(d.allocation_type,'USER','',d.allocation_type) allocation_type,(casewhen initial_extent <1048576then lpad(round(initial_extent/1024,0),3)||'K'else lpad(round(initial_extent/1024/1024,0),3)||'M'end) Ext_Size,NVL (a.bytes /1024/1024, 0) MB,NVL (f.bytes /1024/1024, 0) free,(NVL (a.bytes /1024/1024, 0) - NVL (f.bytes /1024/1024, 0)) used,NVL (rge /1024/1024, 0) largest,d.MAX_EXTENTS ,lpad(round((f.bytes/a.bytes)*100,0),3) pfree,(case when round(f.bytes/a.bytes*100,0) >=20then''else'*'end) alrtFROM sys.dba_tablespaces d,(SELECT tablespace_name, SUM(bytes) bytesFROM dba_data_filesGROUP BY tablespace_name) a,(SELECT tablespace_name, SUM(bytes) bytesFROM dba_free_spaceGROUP BY tablespace_name) f,(SELECT tablespace_name, MAX(bytes) largeFROM dba_free_spaceGROUP BY tablespace_name) lWHERE d.tablespace_name = a.tablespace_name(+)AND d.tablespace_name = f.tablespace_name(+)AND d.tablespace_name = l.tablespace_name(+)AND NOT (d.extent_management LIKE'LOCAL'AND d.contents LIKE'TEMPORARY')UNION ALLselectd.tablespace_name,decode(d.status,'ONLINE', 'OLN','READ ONLY', 'R/O',d.status) status,d.extent_management,decode(d.allocation_type,'UNIFORM','U','SYSTEM','A','USER','',d.allocation_type) allocation_type,(casewhen initial_extent <1048576then lpad(round(initial_extent/1024,0),3)||'K'else lpad(round(initial_extent/1024/1024,0),3)||'M'end) Ext_Size,NVL (a.bytes /1024/1024, 0) MB,(NVL (a.bytes /1024/1024, 0) - NVL (t.bytes /1024/1024, 0)) free,NVL (t.bytes /1024/1024, 0) used,NVL (rge /1024/1024, 0) largest,d.MAX_EXTENTS ,lpad(round(nvl(((a.bytes-t.bytes)/NVL(a.bytes,0))*100,100),0),3) pfree,(case when nvl(round(((a.bytes-t.bytes)/NVL(a.bytes,0))*100,0),100) >=20then''else'*'end) alrtFROM sys.dba_tablespaces d,(SELECT tablespace_name, SUM(bytes) bytesFROM dba_temp_filesGROUP BY tablespace_name order by tablespace_name) a,(SELECT tablespace_name, SUM(bytes_used ) bytesFROM v\$temp_extent_poolGROUP BY tablespace_name) t,(SELECT tablespace_name, MAX(bytes_cached) largeFROM v\$temp_extent_poolGROUP BY tablespace_name order by tablespace_name) lWHERE d.tablespace_name = a.tablespace_name(+)AND d.tablespace_name = t.tablespace_name(+)AND d.tablespace_name = l.tablespace_name(+)AND d.extent_management LIKE'LOCAL'AND d.contents LIKE'TEMPORARY'ORDER by1/promptexitEOF3.查询可直接收缩表空间数据⽂件这⾥查看的是可以直接收缩的数据⽂件⼤⼩,⽐如最开始初始化的数据⽂件为32G,在数据⽂件⾼⽔位以下的为20G,那么可直接回收的为12G。

Oracle收缩表空间

Oracle收缩表空间

Oracle收缩表空间前⼏天做了⼀个表空间收缩的case,今天把⼤概步骤记录⼀下,查看该表空间的物理⽂件信息select ERNAME,u.ACCOUNT_STATUS,f.TABLESPACE_NAME,f.FILE_ID,f.FILE_NAME,(f.BYTES/1024/1024/1024) FILE_SIZE(G) from dba_users u, dba_data_files f where u.DEFAULT_TABLESPACE=f.TABLESPACE_NAME 查看该表空间的使⽤情况select substr(a.tablespace_name,1,20) tablespace,round(sum(a.total1)/1024/1024, 1) Total,round(sum(a.total1)/1024/1024, 1)-round(sum(a.sum1)/1024/1024, 1)used,round(sum(a.sum1)/1024/1024, 1) free,round(round(sum(a.sum1)/1024/1024, 1)*100/round(sum(a.total1)/1024/1024, 1),1) pct_free,round(sum(a.maxb)/1024/1024, 1) largest,max(t) fragmentsfrom(select tablespace_name, 0 total1, sum(bytes) sum1,max(bytes) MAXB,count(bytes) cntfrom dba_free_spacegroup by tablespace_nameunionselect tablespace_name, sum(bytes) total1, 0, 0, 0from dba_data_filesgroup by tablespace_name) agroup by a.tablespace_name;该表空间实际物理⽂件⼤概1.4T,但是实际上由于空间碎⽚化严重,实际上并没有这么多的使⽤,研发给了⼀个删除列表,我们删除⼀些表数据之后再次查看该表空间使⽤信息可以看到即使空闲空间增⼤了,但是TOTAL⼤⼩并没有因此减⼩我们再看通过resize可以将数据⽂件减⾄多⼤select a.TABLESPACE_NAME,a.FILE_ID,a.FILE_NAME,(a.BYTES/1024/1024) as "FILE_SIZE(MB)",b.tb_size as "TABLESPACE_SIZE(MB)",((a.BYTES/1024/1024)-b.tb_size) as "RELEASE_SIZE" from dba_data_files a,(select TABLESPACE_NAME,round(max(BLOCK_ID)*16384/1024/1024) tb_size from dba_extents group by TABLESPACE_NAME) b where a.TABLESPACE_NAME=b.TABLESPACE_NAME order by a.FILE_ID;可以看到仅仅通过resize只能将物理⽂件减少了22408M⼤⼩,不符合我们碎⽚整理的要求,我们通过move表的形式来将表空间缩⼩.先创建⼀个新的表空间CREATE BIGFILE TABLESPACE ADHOC_DATA_BIGFILE DATAFILE'/db02/oradata/FINMART/adhoc_data_bigfile01.dbf' SIZE 500MLOGGINGONLINEPERMANENTEXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;ALTER USER ADHOC QUOTA UNLIMITED ON ADHOC_DATA_BIGFILE;将数据段move⾄新的表空间,创建⼀个sql⽂件,⽤@调⽤即可⽣成move数据段的语句select'alter table '|| owner ||'.'|| segment_name ||' move tablespace ADHOC_DATA_BIGFILE;' sqltext from dba_segments where tablespace_name ='ADHOC_BIGFILE'and segment_type='TABLE';set pagesize 9999 linesize 200set echo onset time onset timing onset feedback onspool mv_adhoc_data_tbs.log select count(*) from dba_tables where TABLESPACE_NAME='ADHOC_BIGFILE'and STATUS='VALID';alter table AGE_BYMONTH_SCOUT_FEB17_P move tablespace adhoc_data_bigfile;alter table ADHOC.TEMP_SUBS_PROFILE_JAN17 move tablespace adhoc_data_bigfile;alter table AGE_BYMONTH_JAN17 move tablespace adhoc_data_bigfile;alter table ADHOC.ENDING_NON_SCOUT_FEB17_P move tablespace adhoc_data_bigfile;alter table ADHOC.ENDING_SCOUT_FEB17_P move tablespace adhoc_data_bigfile;alter table ADHOC.SCOUT_USAGE_SUMMARY_201701 move tablespace adhoc_data_bigfile;alter table ADHOC.SCOUT_PAID_USER_201701 move tablespace adhoc_data_bigfile;alter table ADHOC.TEMP_SUBS_PROFILE_NON_SCOUT move tablespace adhoc_data_bigfile;alter table ADHOC.SUBS_PROFILE_NON_SCOUT move tablespace adhoc_data_bigfile;alter table ADHOC.TEMP_SUBS_PROFILE_SCOUT move tablespace adhoc_data_bigfile;alter table ADHOC.TN_RECEIPT_PTN_201703 move tablespace adhoc_data_bigfile;alter table ADHOC.ACTIVE_USER move tablespace adhoc_data_bigfile;alter table ADHOC.ACTIVE_USER_FINANCE move tablespace adhoc_data_bigfile;alter table AGE_BYMONTH_MAY17 move tablespace adhoc_data_bigfile;alter table ADHOC.ENDING_NON_SCOUT_PREV_1706 move tablespace adhoc_data_bigfile;alter table ADHOC.ENDING_SCOUT_PREV_1706 move tablespace adhoc_data_bigfile;select count(*) from dba_tables where TABLESPACE_NAME='ADHOC_DATA_BIGFILE'and STATUS='VALID';spool offexit;将索引段move⾄新的表空间,创建⼀个sql⽂件,⽤@调⽤即可⽣成move索引段的语句select'alter index '|| owner ||'.'|| segment_name ||' rebuild tablespace ADHOC_DATA_BIGFILE;' sqltext from dba_segments where tablespace_name ='ADHOC_BIGFILE'and segment_type='INDEX';set pagesize 9999 linesize 200set echo onset time onset timing onset feedback onspool mv_adhoc_index_tbs.logselect count(*) from dba_indexes where TABLESPACE_NAME='ADHOC_BIGFILE'and INDEX_TYPE='NORMAL';alter index ADHOC.IDX_ENDING_PTN rebuild tablespace adhoc_data_bigfile;alter index ADHOC.IDX_ENDING_PTN2 rebuild tablespace adhoc_data_bigfile;alter index ADHOC.SYS_C0062583 rebuild tablespace adhoc_data_bigfile;alter index ADHOC.IDX_PRDCD_SOC rebuild tablespace adhoc_data_bigfile;alter index ADHOC.IDX_PD_2 rebuild tablespace adhoc_data_bigfile;alter index ADHOC.IDX_SM_2 rebuild tablespace adhoc_data_bigfile;alter index ADHOC.IDX_RPT_2 rebuild tablespace adhoc_data_bigfile;alter index ADHOC.IDX_SM_3 rebuild tablespace adhoc_data_bigfile;alter index ADHOC.IDX_RPT_3 rebuild tablespace adhoc_data_bigfile;alter index ADHOC.SYS_C0062450 rebuild tablespace adhoc_data_bigfile;alter index ADHOC.SYS_C0062452 rebuild tablespace adhoc_data_bigfile;select count(*) from dba_indexes where TABLESPACE_NAME='ADHOC_DATA_BIGFILE'and INDEX_TYPE='NORMAL'and STATUS='VALID';spool offexit;将lob段move⾄新的表空间,创建⼀个sql⽂件,⽤@调⽤即可⽣成move lob段的语句select'alter table '|| owner ||'.'|| table_name ||' move lob('|| column_name ||') store as(tablespace adhoc_data_bigfile);' sqltext from dba_lobs where tablespace_name ='ADHOC_BIGFILE';set pagesize 9999 linesize 200set echo onset time onset timing onset feedback onspool mv_adhoc_lob_tbs.logselect count(*) from dba_indexes where TABLESPACE_NAME='ADHOC_BIGFILE'and INDEX_TYPE='LOB';alter table ADHOC.DJANGO_ADMIN_LOG move lob(OBJECT_ID) store as(tablespace adhoc_data_bigfile);alter table ADHOC.DJANGO_ADMIN_LOG move lob(CHANGE_MESSAGE) store as(tablespace adhoc_data_bigfile);alter table ADHOC.DJANGO_SESSION move lob(SESSION_DATA) store as(tablespace adhoc_data_bigfile);select count(*) from dba_indexes where TABLESPACE_NAME='ADHOC_DATA_BIGFILE'and INDEX_TYPE='LOB'and STATUS='VALID';spool offexit;以上操作执⾏完成后,查看该表的物理⽂件信息select ERNAME,u.ACCOUNT_STATUS,f.TABLESPACE_NAME,f.FILE_ID,f.FILE_NAME,(f.BYTES/1024/1024/1024) FILE_SIZE from dba_users u, dba_data_files f where u.DEFAULT_TABLESPACE=f.TABLESPACE_NAME 查看表空间使⽤信息,基本上符合我们的要求了将⽤户的默认表空间设置为我们新建的表空间ALTER USER ADHOC DEFAULT TABLESPACE ADHOC_DATA_BIGFILE;附查看某⼀表空间下block的分布情况select c.segment_name,c.block_id start_block_id,d.total segment_length,(c.block_id + d.total) end_block_id from(select segment_name,block_id from dba_extents where tablespace_name='REPMART_DATA_BIGFILE' and extent_id=0) c,(select segment_name,sum(blocks) total from dba_extents where tablespace_name='REPMART_DATA_BIGFILE' group by segment_name) dwhere c.segment_name=d.segment_nameorder by c.block_id desc;。

数据库的收缩方法

数据库的收缩方法当数据库中的数据量变大时,数据库的性能会逐渐下降,甚至可能出现崩溃的情况。

这时候,我们就需要对数据库进行收缩,以提高数据库的性能和稳定性。

本文将介绍数据库的收缩方法。

1. 删除不必要的数据在数据库中,可能存在一些不必要的数据,例如过期的数据、重复的数据等。

这些数据不仅会占用数据库的存储空间,还会降低数据库的查询性能。

因此,我们需要定期清理这些不必要的数据,以减少数据库的存储需求。

2. 优化数据库结构数据库的结构设计对数据库的性能和稳定性有重要影响。

如果数据库的结构设计不合理,可能会导致数据库的性能下降或者出现崩溃的情况。

因此,我们需要优化数据库的结构设计,例如优化数据表的字段类型、添加索引等,以提高数据库的性能和稳定性。

3. 压缩数据库在数据库中,存在大量的冗余数据和空间碎片,这些数据会占用数据库的存储空间,导致数据库性能下降。

为了解决这个问题,我们可以对数据库进行压缩,以减少数据库的存储空间。

4. 数据库备份和恢复数据库备份和恢复是数据库管理中的重要工作。

通过定期备份数据库,我们可以保证数据的安全性,同时在数据库出现故障时,可以通过恢复备份数据来解决问题,从而提高数据库的稳定性。

5. 数据库分区对于大型数据库,我们可以通过对数据库进行分区来提高数据库的性能和稳定性。

通过将数据库分成多个区域,可以减少单个区域的数据量,从而提高数据库的查询性能和稳定性。

总结:数据库的收缩方法包括删除不必要的数据、优化数据库结构、压缩数据库、数据库备份和恢复、数据库分区等。

通过这些方法,我们可以提高数据库的性能和稳定性,从而满足不同应用场景的需求。

数据库中的数据压缩方法

数据库中的数据压缩方法数据压缩方法在数据库管理系统中具有重要意义,它可以帮助提高数据的存储效率,减小存储成本,并加快数据的传输速度。

本文将介绍一些常用的数据库中的数据压缩方法,包括列压缩、行压缩和字典压缩,并分析它们的优缺点及适应场景。

首先,我们来讨论列压缩。

列压缩是将每个列中的数据按照同种类型进行压缩。

例如,在一个包含大量重复值的列中,可以使用字典压缩来实现。

字典压缩方法将该列中的所有唯一值构建一个字典表,并用字典表中的索引替代原始的值来存储。

由于索引通常只是一个数值,因此可以大大减小存储空间。

字典压缩在处理大规模的、有大量重复值的列数据时非常有效,例如性别、城市等。

其次,行压缩是将连续的相似数据压缩到一起。

相对于列压缩,行压缩可以更好地处理复杂结构的表,其中的数据通常由多个列组成。

行压缩的主要方法是使用位图压缩。

位图压缩是通过将每一行的相同列值对应位置置为1,不同行对应位置置为0来压缩的。

通过这样的压缩方式,可以大大减小存储空间。

位图压缩在处理具有大量相同值的列数据时非常有效,例如性别、年龄等。

最后,我们来讨论字典压缩。

字典压缩是一种适用于长文本字段的压缩方法,它通过构建一个字典表,并使用字典表中的索引替代原始的文本值来存储。

由于索引通常只是一个数值,因此可以大大减小存储空间。

字典压缩在处理大规模的、包含大量重复值的文本字段数据时非常有效,例如描述、评论等。

上述三种压缩方法都可以在数据库中使用,具体选择哪种方法取决于数据的特点和应用的需求。

然而,不同的压缩方法也存在一些弊端。

首先,压缩和解压缩过程会增加计算的开销,降低数据的访问性能。

因此,在应用压缩方法时,需要权衡存储效率和访问性能之间的关系。

其次,压缩方法可能会引入一些额外的复杂性和难以预料的问题,例如数据损坏、冗余数据等。

因此,在应用压缩方法时,需要进行充分的测试和验证。

总结来说,数据库中的数据压缩方法是提高存储效率、降低存储成本、加快数据传输速度的重要手段。

rman备份压缩参数

在Oracle RMAN备份中,可以使用压缩功能来减小备份文件的大小,从而节省存储空间。

以下是一些常用的RMAN备份压缩参数:
PRESSION LEVEL:RMAN允许设置不同的压缩级别,包括NONE(无压缩)、
LOW(低压缩,速度快)、MEDIUM(中等压缩)和HIGH(高压缩,速度慢)。

可以
根据需求选择合适的压缩级别。

2.BACKUPSET COMPRESSION:可以通过设置BACKUPSET COMPRESSION选项来启
用或禁用备份集的压缩。

语法为“BACKUP AS COMPRESSED BACKUPSET DATABASE”。

3.DATAFILE COPY COMPRESSION:对数据文件副本进行备份时,也可以使用压缩参
数。

语法为“BACKUP AS COPY COMPRESSED DATAFILE”。

4.ARCHIVELOG COMPRESSION:在备份归档日志时,也可以使用压缩参数。

语法为
“BACKUP ARCHIVELOG ALL COMPRESSED”。

在实际操作中,可以根据需要选择合适的压缩参数,并结合具体的备份策略和存储需求来进行设置。

压缩参数的选择应平衡备份速度、存储成本和恢复性能等因素。

此外,还需要注意压缩可能会增加备份和恢复的CPU负载,因此需要综合考虑系统资源的利用情况。

oracle分区表压缩方法

oracle分区表压缩方法Oracle分区表压缩方法在Oracle数据库中,分区表是一种将大表拆分为多个较小、易于管理的分区的方法。

然而,随着数据的增长,分区表的存储需求也会不断增加。

为了解决这个问题,我们可以使用分区表压缩方法来减少存储空间的占用。

一、分区表压缩概述分区表压缩是指通过使用一些特定的技术和算法,对分区表中的数据进行压缩,以减少数据在磁盘上的存储空间。

这样可以节省存储成本,并提高数据的读写性能。

二、分区表压缩方法1.基于列的压缩基于列的压缩是一种以列为单位进行压缩的方法。

Oracle提供了多种列压缩技术,包括基于前缀的压缩、基于字典的压缩和基于位图的压缩等。

这些方法可以根据数据的特点选择最适合的压缩方式,以达到最佳的压缩效果。

2.基于行的压缩基于行的压缩是一种以行为单位进行压缩的方法。

Oracle提供了基于行的压缩技术,包括基于行存储的压缩和基于行组织的压缩等。

这些方法可以有效地减少数据的存储空间,并提高数据的读取性能。

3.基于分区的压缩基于分区的压缩是一种以分区为单位进行压缩的方法。

Oracle提供了分区压缩技术,可以对每个分区进行独立的压缩设置。

这样可以根据每个分区的特点选择最适合的压缩方式,以达到最佳的压缩效果。

4.基于表空间的压缩基于表空间的压缩是一种以表空间为单位进行压缩的方法。

Oracle 提供了表空间压缩技术,可以对整个表空间进行压缩设置。

这样可以统一管理表空间的压缩设置,简化管理工作,并提高压缩效果。

三、分区表压缩实践下面以一个示例来说明如何使用分区表压缩方法。

假设我们有一个分区表,包含了大量的历史数据,但这些数据很少被查询。

为了减少存储空间的占用,我们可以对该分区表进行压缩。

我们可以使用基于列的压缩方法,对一些冷数据列进行压缩。

例如,对于一些稀疏的列或者只包含有限取值的列,可以使用基于字典的压缩方法,将数据压缩为字典编码,从而减少存储空间的占用。

我们可以使用基于分区的压缩方法,对每个分区进行独立的压缩设置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档