当前位置:首页>开发>正文

怎么恢复损坏后的undo表空间 mysql如何建表空间

2023-04-12 14:35:24 互联网 未知 开发

 怎么恢复损坏后的undo表空间 mysql如何建表空间

怎么恢复损坏后的undo表空间

首先,undo表空间满是正常的,oracle自然会重用或者扩展它,一般不用管它。
然后,现在要解决的话,需要先把undo tablespace设置成手动,启动数据库,创建新的undo tablespace。把新的设置成默认的。
假设你的库现在是mounted状态
1 创建PFILE(如果已有就是更新)
SQL>create pfile from spfile
2 关闭数据库
SQL>shutdown immediate
3 在你的$ORACLE_HOME/dbs目录下面找个叫做
init<数据库>.ora的文件,把其中有undo_management=AUTO的一行改成
undo_management=MANUAL
如果没有就在文件末尾填一行
4 以sysdba身份连接数据库
SQL>connect "/ as sysdba"
用刚才改过的文件启动数据库
SQL> startup pfile=<刚才的文件全路径和名字>
这步是最关键的,如果成功,后面就没问题了
5 drop掉原来的表空间
SQL> drop tablespace <原来的undo表空间名字> including contents
6 创建新的undo表空间
SQL> create UNDO tablespace undotbs2 datafile /u01/app/oracle/oradata/orcl/undotbs02.dbf size 100M autoextend on
7 关闭数据库,
SQL>shutdown immediate
在开始那个init文件里设置UNDO_MANAGEMENT=AUTO
和 UNDO_TABLESPACE=UNDOTBS2
8 再做一次第四步
9 更新spfile
SQL>create spfile from pfile
10 关闭数据库,正常重新启动
SQL>shutdown immediate
SQL>startup
11 去网上教你删undo那个地方骂它。非常想当然的做法。没有任何理由这么做
12 让你的工程师去学oracle 培训

以上步骤的中的第5步可能会出问题。我不确认。。。 但是即使第5步不成功,问题应该也不大

mysql如何建表空间

在mysql中,也出现了类似oracle中的表空间概念。
不过二者好像不同?具体不太清楚oracle是怎么回事。
mysql表空间是什么概念呢?
开启了Innodb的innodb_file_per_table这个参数之后【innodb_file_per_table = 1】,也就是启用InnoDB的独立表空间模式,便于管理。此时,在新建的innodb表的数据库目录下会多出来一个.ibd这个文件。这个就是此时的数据文件了。mysql会把这个innodb表的数据存放在这个文件中。并且每个innodb表此时都会对应这么一个ibd文件。
看官方文档:
If innodb_file_per_table is disabled (the default), InnoDB creates tables in the system tablespace. Ifinnodb_file_per_table is enabled, InnoDB creates each new table using its own .ibd file for storing data and indexes, rather than in the system tablespace.
那么这样做有什么好处呢?
可以实现单表在不同的数据库之间移动。具体怎么移动呢?假设有两个数据库,一个test,一个tt。
InnoDB 默认会将所有的数据库InnoDB引擎的表数据存储在一个共享空间中:ibdata1,这样就感觉不爽,增删数据库的时候,ibdata1文件不会自动收缩,单个数据库的备份也将成为问题。通常只能将数据使用mysqldump 导出,然后再导入解决这个问题。共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整一 下innodb_open_files 的值。
-------------------------------------------------------------------------------
需要说明的是:
1、设置了独立表空间之后,如果改成了共享表空间,那么,此时如果执行表的插入操作,数据会存放在哪里呢?
对于之前已经存在了的表,还是存放在独立表空间。对于新建的表,就会存放在共享表空间了。
2、如果一开始用了独立表空间,后来改了innodb_file_per_table变量的值,改成独立表空间了,那么数据如何存储?
对于已经存在了的innodb引擎的表来说,数据还是存放在共享表空间的,而此时如果创建了新的表,那么就会在数据库的目录中多出一个.ibd的文件用于存储这个新表的数据。
总结上面的1、2,就是:原来的还是按照原来的方式存储。新的表按照新的规则来存储。

mysql 的表空间和oracle 的表空间的区别是什么?

一、并发性
并发性是Oltp数据库最重要的特性,但并发涉及到资源的获取、共享与锁定。
Mysql:
mysql以表级锁为主,对资源锁定的粒度很大,如果一个session对一个表加锁时间过长,会让其他session无法更新此表中的数据。
虽然InnoDB引擎的表可以用行级锁,但这个行级锁的机制依赖于表的索引,如果表没有索引,或者sql语句没有使用索引,那么仍然使用表级锁。
Oracle:
Oracle使用行级锁,对资源锁定的粒度要小很多,只是锁定sql需要的资源,并且加锁是在数据库中的数据行上,不依赖与索引。所以Oracle对并发性的支持要好很多。
二、一致性
Oracle:
Oracle支持serializable的隔离级别,可以实现最高级别的读一致性。每个session提交后其他session才能看到提交的更改。Oracle通过在undo表空间中构造多版本数据块来实现读一致性,
每个session查询时,如果对应的数据块发生变化,Oracle会在undo表空间中为这个session构造它查询时的旧的数据块。
Mysql:
Mysql没有类似oracle的构造多版本数据块的机制,只支持read commited的隔离级别。一个session读取数据时,其他session不能更改数据,但可以在表最后插入数据。
session更新数据时,要加上排它锁,其他session无法访问数据。

mysql 怎么查看 临时表空间使用情况

if (select object_ID(tempdb..#BaseInfoFK)) >0 drop table #BaseInfoFK
select a.* into #BaseInfoFK from (select * from table)a#BaseInfoFK是临时表的名一定要加#

如何创建mysql的表空间文件ibdata2

Operating System File-size Limit
Win32 w/ FAT/FAT32 2GB/4GB
Win32 w/ NTFS 2TB (possibly larger)
Linux 2.4 (using ext3 file system) 4TB
Solaris 9/10 16TB
MacOS X w/ HFS 2TB
NetWare w/NSS file system 8TB
你应该是用WIN32 FAT32吧,把ibdata1文件考到NTFS格式的磁盘上。

最新文章

随便看看