如何修改数据库表空间大小 (数据库表空间大小的修改)

数据库表空间是用于存储数据库中表的数据和索引的逻辑存储单元。随着数据量的增加,表空间的空间可能会不足,导致数据库出现性能问题。因此,适时地修改数据库表空间大小是必要的。本文将讨论。

1. 查询表空间大小

在修改表空间大小之前,首先需要确定当前表空间的大小和使用情况。可以通过以下SQL语句查询表空间大小:

“`sql

SELECT TABLESPACE_NAME, FILE_ID, FILE_NAME, BYTES / 1024 / 1024 AS MB FROM DBA_DATA_FILES;

“`

执行以上SQL语句就可以查询出表空间的名称、文件ID、文件名和大小。

2. 增加表空间大小

如果发现表空间已经使用到了90%,那么就需要考虑增加表空间大小。以下是增加表空间大小的步骤:

步骤1:通过以下SQL语句查询当前使用的表空间的名称:

“`sql

SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE CONTENTS = ‘PERMANENT’ AND STATUS = ‘ONLINE’;

“`

步骤2:执行以下SQL语句创建一个新的数据文件,并指定大小:

“`sql

ALTER TABLESPACE ADD DATAFILE ‘/.dbf’ SIZE M;

“`

例如,以下SQL语句增加了大小为5GB的表空间:

“`sql

ALTER TABLESPACE mytbs ADD DATAFILE ‘/u01/oracle/data/mytbs02.dbf’ SIZE 5G;

“`

步骤3:执行以下SQL语句将新的数据文件添加到表空间中:

“`sql

ALTER TABLESPACE ADD DATAFILE ‘/.dbf’ SIZE M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;

“`

例如,以下SQL语句将新的数据文件添加到mytbs表空间中,并启用自动扩展功能:

“`sql

ALTER TABLESPACE mytbs ADD DATAFILE ‘/u01/oracle/data/mytbs03.dbf’ SIZE 10G AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;

“`

通过以上操作,就增加了表空间的大小。

3. 缩小表空间大小

如果表空间的使用率很低,或者需要释放存储空间以供其他用途,那么就需要缩小表空间大小。以下是缩小表空间大小的步骤:

步骤1:通过以下SQL语句查询当前使用的表空间的名称:

“`sql

SELECT TABLESPACE_NAME FROM DBA_TABLESPACES WHERE CONTENTS = ‘PERMANENT’ AND STATUS = ‘ONLINE’;

“`

步骤2:执行以下SQL语句修改表空间的大小:

“`sql

ALTER DATABASE DATAFILE ‘/.dbf’ RESIZE ;

“`

例如,以下SQL语句将大小为10GB的数据文件mytbs03.dbf缩小为5GB:

“`sql

ALTER DATABASE DATAFILE ‘/u01/oracle/data/mytbs03.dbf’ RESIZE 5G;

“`

通过以上操作,就可以缩小表空间的大小。

4.

相关问题拓展阅读:

linux怎么修改mysql数据库临时表空间大小

先来说说临时表的概念。 临时表顾名思义,就是临时的,用完销毁掉的表。 数据既可以保存在临时的文件系统上,也可以保存在固定的磁盘文件系统上。 临时表有下面几种:

1全局临时表

这种临时表从数据库实例启动后开始生效,在数据库实例销毁后失效。在MySQL里面这种临时表对应的是内存表,即memory引擎。

2会话级别临时表

这种临时表在用户登录系统成功后生效,在用户退出时失效。在MySQL里的临时表指的就是以 create temporary table 这样的关键词创建的表。

3事务级别临时表

这种临时表在事务开始时生效,事务提交或者回滚后失效。 在MySQL里面没有这种临时表,必须利用会话级别的临时表间接实现。

4检索级别临时表

这种临时表在SQL语句执行之间产生,执行完毕后失效。 在MySQL里面这种临时表不是很固定,跟随MySQL默认存储引擎来变化。比如默认存储引擎是MyISAM,临时表的引擎就是MyISAM,并且文件生成形式以及数据运作形式和MyISAM一样,只是数据保存在内存里;如果默认引擎是INNODB,那么临时表的引擎就是INNODB,此时它的所有信息都保存在共享表空间ibdata里面。

MySQL 5.7对于InnoDB存储引擎的临时表空间做了优化。在MySQL 5.7之前,INNODB引擎的临时表都保存在ibdata里面,而ibdata的贪婪式磁盘占用导致临时表的创建与删除对其他正常表产生非常大的性能影响。在MySQL5.7中,对于临时表做了下面两个重要方面的优化:

MySQL5.7 把临时表的数据以及回滚信息(仅限于未压缩表)从共享表空间里面剥离出来,形成自己单独的表空间,参数为innodb_temp_data_file_path。

在MySQL5.7 中把临时表的相关检索信息保存在系统信息表中:information_schema.innodb_temp_table_info. 而MySQL 5.7之前的版宽判念本想要查看临时表的系统信息是没有太好的办法。

需要注意的一点慎困就是,虽然INNODB临时表有自己的表空间,但是目前还不能自己定义临时表空间文件冲亏的保存路径,只能是继承innodb_data_home_dir。此时如果想要拿其他的磁盘,比如内存盘来充当临时表空间的保存地址,只能用老办法,做软链。举个小例子:

我现在用的OS是 Ubuntu12.X,想用tmpfs文件系统充当临时表空间,

root@ytt-master-VirtualBox:/usr/local/mysql/data# ln -s/run/shm/ /usr/local/mysql/data/tmp_space2

root@ytt-master-VirtualBox:/usr/local/mysql/data#ls -l | grep ‘shm’

lrwxrwxrwx1 root root 9 Nov 13 10:28tmp_space2 -> /run/shm/

然后把

innodb_temp_data_file_path=tmp_space2/ibtmp2:200M:autoextend

添加到my.cnf里的下面一行

重启MySQL服务后,

mysql>select @@innodb_temp_data_file_path\G

***************************1. row ***************************

@@innodb_temp_data_file_path:tmp_space2/ibtmp2:200M:autoextend

1 rowin set (0.00 sec)

先写一个批量创建临时表的存储过程:

DELIMITER$$

USE`t_girl`$$

DROPPROCEDURE IF EXISTS `sp_create_temporary_table`$$

CREATEDEFINER=`root`@`localhost` PROCEDURE `sp_create_temporary_table`(

IN f_cnt INT UNSIGNED )

BEGIN

DECLARE i INT UNSIGNED DEFAULT 1;

WHILE i call sp_create_temporary_table(10);

QueryOK, 0 rows affected (0.07 sec)

如果在以前,我们只知道创建了10张临时表,但是只能凭记忆或者手工记录下来临时表的名字等信息。

现在可以直接从数据字典里面检索相关数据。

mysql> select * frominformation_schema.innodb_temp_table_info;

++++++-+

|TABLE_ID | NAME | N_COLS | SPACE| PER_TABLE_TABLESPACE | IS_COMPRESSED |

++++++-+

| 56 | #sql1705_2_9 | 5 | 36 | FALSE | FALSE |

| 55 | #sql1705_2_8 | 5 | 36 | FALSE |FALSE |

| 54 | #sql1705_2_7 | 5 | 36 | FALSE | FALSE |

| 53 | #sql1705_2_6 | 5 | 36 | FALSE | FALSE |

| 52 | #sql1705_2_5 | 5 | 36 | FALSE |FALSE |

| 51 | #sql1705_2_4 | 5 | 36 | FALSE | FALSE |

| 50 | #sql1705_2_3 | 5 | 36 | FALSE | FALSE |

| 49 | #sql1705_2_2 | 5 | 36 | FALSE |FALSE |

| 48 | #sql1705_2_1 | 5 | 36 | FALSE | FALSE |

| 47 | #sql1705_2_0 | 5 | 36 | FALSE | FALSE |

++++++-+

10rows in set (0.00 sec)

功能性我就写到这里,大家性能方面如果有兴趣可以找时间去测试。

一般分为没码windows和linux

windows通常放在安装目闷高录下的 \MySQL\MySQL Server 5.0\my.ini

Linux 默认是放在 /etc/my.cnf

数据库创建后怎样修改数据库数据文件和日志文件分配的空间大小

–修改数据库文件增量

USE master

GO

Alter DATABASE Test

MODIFY FILE

(NAME = test,

— SIZE = 1000MB,

–MAXSIZE = 10000MB,

FILEGROWTH = 100MB)

GO

–修改数据库日志文件增量

USE master

GO

Alter DATABASE Test

MODIFY FILE

(NAME = test_log,

— SIZE = 1000MB,

–MAXSIZE = 10000MB,

FILEGROWTH = 100MB)

GO

参考以下内容:

view plaincopyprint?

/*

一般的虚拟主机上,附送的sql server数据库都是限制了大小,比如100M。当你的数据库空间达到了指定的100M时,插入新数据就会报错:

未能为数据库 ‘a’ 中的对象 ‘fc_Info’ 分配空间,因为文件组 ‘PRIMARY’ 已满

其实,有些亩帆主机商的数据库大小是可以自己修改的。当然,修改之前你需要知道数据库名(这里是逻辑名称),一般的这个唤昌名称是很容易知道的,就是数据库名称。

你可以尝试下在自己编写的程序中,或空间的管理后台中等可以执行sql语句的地方试一下下面的语句:

Alter DATABASE 数据库名

modify FILE

( NAME = 数据库名,

MAXSIZE = 200MB,

FILEGROWTH = 5MB)

如果执行成功,那么恭喜你了。

========我是分割线============================================

下面是Alter DATABASE的一些参考资料,详细可以查看sql server帮助。

在数据库中添加或删除文件和文件组。也可用于更改文件和文件组的属性,例如更改文件的名称和大小。Alter DATABASE 提供了更改迅链雹数据库名称、文件组名称以及数据文件和日志文件的逻辑名称的能力。

Alter DATABASE 支持数据库选项的设置。在早期版本的 Microsoft® SQL Server™ 中,这些选项可以通过 sp_dboption 存储过程来设置。在此次发布的版本中,SQL Server 继续支持 sp_dboption存储过程,但在未来版本中可能不再支持。可使用 DATABASEPROPERTYEX 函数检索数据库选项的当前设置。

语法

Alter DATABASE database

{ ADD FILE

| ADD LOG FILE

| REMOVE FILE logical_file_name

| ADD FILEGROUP filegroup_name

| REMOVE FILEGROUP filegroup_name

| MODIFY FILE

| MODIFY NAME = new_dbname

| MODIFY FILEGROUP filegroup_name {filegroup_property | NAME = new_filegroup_name }

| SET

| COLLATE

}

::=

( NAME = logical_file_name

)

::=

|

|

|

|

::=

{ SINGLE_USER | RESTRICTED_USER | MULTI_USER }

| { OFFLINE | ONLINE }

| { READ_ON | READ_WRITE }

::=

ROLLBACK AFTER integer

| ROLLBACK IMMEDIATE

| NO_WAIT

::=

CURSOR_CLOSE_ON_COMMIT { ON | OFF }

| CURSOR_DEFAULT { LOCAL | GLOBAL }

::=

AUTO_CLOSE { ON | OFF }

| AUTO_Create_STATISTICS { ON | OFF }

| AUTO_SHRINK { ON | OFF }

| AUTO_Update_STATISTICS { ON | OFF }

::=

ANSI_NULL_DEFAULT { ON | OFF }

| ANSI_NULLS { ON | OFF }

| ANSI_PADDING { ON | OFF }

| ANSI_WARNINGS { ON | OFF }

| ARITHABORT { ON | OFF }

| CONCAT_NULL_YIELDS_NULL { ON | OFF }

| NUMERIC_ROUNDABORT { ON | OFF }

| QUOTED_IDENTIFIER { ON | OFF }

| RECURSIVE_TRIGGERS { ON | OFF }

::=

RECOVERY { FULL | BULK_LOGGED | SIMPLE }

在Oracle数据库中,我们如何增加表空间的大小?

表空间在初始建立的时候更好设置成自动扩展的,如果没有设置成扩展的,则有四种方法可以增加表空间的大小,其中嫌锋弊增加数据文件是经常用的一种。四种方法如下:

Meathod1:给表空间增加数据文件

ALTER TABLESPACE app_data ADD DATAFILE

‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF’ SIZE 50M;

Meathod2:新增数芹族据文件,并且允许数据文件自动增长

ALTER TABLESPACE app_data ADD DATAFILE

‘D:\基者ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP04.DBF’ SIZE 50M

AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

Meathod3:允许已存在的数据文件自动增长

ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP03.DBF’

AUTOEXTEND ON NEXT 5M MAXSIZE 100M;

Meathod4:手工改变已存在数据文件的大小

ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\EDWTEST\APP02.DBF’

RESIZE 100M;

数据库表空间大小的修改的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于数据库表空间大小的修改,如何修改数据库表空间大小,linux怎么修改mysql数据库临时表空间大小,数据库创建后怎样修改数据库数据文件和日志文件分配的空间大小,在Oracle数据库中,我们如何增加表空间的大小?的信息别忘了在本站进行查找喔。


数据运维技术 » 如何修改数据库表空间大小 (数据库表空间大小的修改)