怎样新建数据库表空间

打开数据库TestDb1看到建库脚本:

创建表空间必须首先建空目录,假设建文件夹:E:\PostgreSQL\data\TestDbs1,建表空间是选择该目录。
打开表空间TestDbs1, 可以看到建表空间脚本:

角色就相当于岗位:角色可以是经理,助理。
用户就是具体的人:比如陈XX经理,朱XX助理,王XX助理。
创建角色TestRole1,输入密码,分配权限,需要分配login权限系统才会自动创建同名用户TestRole1。
打开角色TestRole1,可以看到创建角色脚本:

如果没有使用域名,而 NAMES.DEFAULT_DOMAIN 参数存在,则删掉它或注释掉。

6. 如果从对话框进行连接,要带@号。

7. 启动客户端的跟踪功能,再连接。

原因: 在客户端找不到目标数据库

1. 所输入的网络服务名是否正确

4. 确认远程监听器是否启动:输入:

如果没有启动,则启动:

5.如果从对话框连接,不要忘记加@号

原因: 所安装的协议不正确。可能与下面原因一样:

措施: 用下面命令确认数据库是否在运行:

如果系统提示没有运行,则用下面命令启动:

ORA-12203 另外原因: 目标系统的监听没有工作。

措施: 确包远程系统的监听在工作,输入:

如果确实没有工作,则输入:

ORA-12203 另外原因: 存在潜在的事务问题。

措施: 确保实用程序支持目前的网络协议,如 TCP/IP。用 PING 试。

措施: 确认这些参数使用相同的名字。

对于 SPX ,在客户端的名字必须相同。

原因:由于监听没有工作而连接请求不能完成。

1. 确认支持的目标地址与数据库之一匹配。

措施:根据 ADDRESS 语法进行改正。

原因: 远程节点不能连接。

2. 确认远程节点已经启动。输入:

如果没有启动,则输入:

原因: 监听不能启动。

2. 分析跟踪文件的内容。

原因:一个无法预料文件结束在通信通道里被处理。可能是通信连接被临时地停止了。

措施:需要修改发射次数等。

措施: 不要使用下面前缀进行连接:

Oracle8i 引入了几项崭新的特性,可简化对 ORDBMS 的管理,并使其更易操作和使用。

4.1 本地化管理表空间

在传统的数据字典管理的表空间里,Oracle 在数据字典的表里面记录了每个表空间的每个区的使用状况:每当一个区被使用或被释放时,Oracle 都在数据字典里面更新相应的信息,并产生相应的 redo 信息。在 Oracle8I 里,这仍然是默认的表空间管理方式。

在 Oracle8I 的版本中,Oracle 推出了一种全新的表空间管理方式:本地化管理的表空间。所谓本地化管理,就是指 Oracle 不再利用数据字典的表来记录 Oracle 表空间里面的区的使用状况,而是在每个表空间的数据文件的头部加入了一个记录块,在其中记录每个区的使用状况。每当一个区被使用,或者被释放以供重新使用时,Oracle 都会更新数据文件头部的这个记录,反映这个变化。

本地化管理的表空间的创建过程:

解释: 关键字 EXTENT MANAGEMENT LOCAL 指定这是一个本地化管理的表空间。对于系统表空间,只能在创建数据库的时候指定 EXTENT MANGEMENT LOCAL,因为它是数据库创建时建立的第一个表空间。

若为 DICTIONARY,则表明这是一个传统的数据字典管理的表空间,这是个默认选项。

当选择了 LOCAL 关键字,即表明这是这是一个本地化管理的表空间后,还可以继续选择更细的管理方式:是 AUTOALLOCATE 还是 UNIFORM.。若为 AUTOALLOCATE,则表明让 Oracle 来决定区块的使用办法;若选择了 UNIFORM,则还可以详细指定每个区块的大小,若不加指定,则为每个区使用 1M 大小。

是本地化管理的表空间还是创建数据字典管理的表空间只能在创建表空间的时候指定。在表空间已经创建以后,则不能再把本地化管理的表空间和数据字典管理的表空间再相互转换。在创建临时表空间时,也可以在 CREATE TEMPORARY TABLESPACE 中指定EXTENT MANAGEMENT LOCAL 来指定这是一个本地化管理的表空间。

本地化管理表空间的优点:

1. 本地化管理的表空间避免了递归的空间管理操作。而这种情况在数据字典管理的表空间是经常出现的,当表空间里的区的使用状况发生改变时,数据字典的表的信息发生改变,从而同时也使用了在系统表空间里的回滚段。

2. 本地化管理的表空间避免了在数据字典相应表里面写入空闲块、已使用块的信息,从而减少了数据字典表的竞争。

3. 区的本地化管理自动跟踪表空间里的空闲块,减少了手工合并自由空间的需要。

4. 表空间里的区的大小可以选择由 Oracle 系统来决定,或者由数据库管理员指定一个统一的大小。

5. 从由数据字典来管理空闲块改为由数据文件的头部记录来管理空闲块,这样避免产生回滚信息,不再使用系统表空间里的回滚段。因为由数据字典来管理的话,它会把相关信息记在数据字典的表里,从而产生回滚信息。由于这种表空间的以上特性,所以它支持在一个表空间里边进行更多的并发操作,并减少了对数据字典的依赖。

当然本地化管理的表空间也不是对所有的数据库和数据库对象都是适用的。首先,它不能指定存储特性,无 STORAGE 子句可供使用。其次,它不适用于存储较小的数据库对象。

总的来说,oracle8I 提供了这种全新的表空间管理方式,给了我们更多的选择。对于用来存储大对象的表空间和临时表空间来说,用本地化管理的表空间组织方式不失为一个较好的选择。

Oracle8i的很重要的一个新特性就是增加了 function-based index 这种索引类型(后面简称为 FBI)。有了这个特性后,Oracle DBA 就可以在索引中使用函数或者表达式了。这些函数可以使 Oracle 自己的函数,也可以使用户自己的 PL/SQL 函数等。

DBA 在 SQL 语句调优的过程中遇到的一个很常见的问题就是,如何优化那些在 WHERE子句中使用了函数的语句。因为在以前,在 WHERE 子句中使用函数会使在这个表上创建的索引没法利用,从而难以提高这个语句的性能。

使用基于成本的优化器,索引为标准的 B 树索引,建立在 SURNAME 列上。

从 SQL*PLUS 的 autotrace 产生的执行路径可以看到,虽然我们在 WHERE 子句中用到的SURNAME 列上创建了索引,但是仍然执行的是全表扫描。如果这张表很大的话,这回消耗大量的时间。

现在我们试着建立一个 FBI 索引:

SQL*Plus 返回的执行计划我们可以看到,这次,Oracle 对表不再全表扫描,而是先扫描索引,因为优化器可以知道 FBI 索引得存在使用 FBI 索引所能够带来的性能提升取决于表的大小、表中重复记录的量、在 WHERE子句中使用的列等因素。

有一点需要清楚,FBI 索引并不真正在索引里边存储了表达式的结果,而是使用了一个"表达树"(expression tree)。

由优化器来对 SQL 语句中的表达式进行解析,并且和 FBI 索引上面的表达式进行对比。这里,SQL 函数的大小写时敏感的。因此要求 SQL 语句中使用的函数和创建 FBI 索引得时候的那个 SQL 函数的大小写一致,否则无法利用这个 FBI索引。因此,在编程的时候要有一个良好的编程风格。

Init.ora里边需要修改的参数

下面这几个参数必须在 init.ora 里边指定:

索引的使用者必须能够有那个 FBI 索引上使用的那个函数的执行权限。如果没有相应

如果那个FBI 索引得状态是 DISABLED,那么 DBA 可以这样来处理:

注意:如果一个查询中使用到了这个索引,但是这个 FBI 索引的状态是 DISABLED,但是优化器选择了使用这个索引,那么将会返回一个 Oracle 错误。

而且,一旦这个 FBI 索引的状态是 Disabled,那么这张表上所有涉及索引列的 DML 操作也将失败。除非这个索引得状态变成 UNUSABLE,而且在初始化参数里边指定 SKIP_UNUSABLE_INDEXES为 TRUE。

对于下面这些限制,不能创建 FBI 索引:

d) 包含上面数据类型的对象

FBI 索引必须遵守下面的规则:

a) 必须使用基于成本的优化器,而且创建后必须对索引进行分析

b) 不能存储 NULL 值。因为任何函数在任何情况下都不能返回 NULL 值。

c)如果一个用户定义的 PL/SQL 例程失效了,而且这个例程被 FBI 索引用到了,那么相应的这个 FBI 索引会变成 DISABLED

d)创建 FBI 索引得函数必须是确定性的。即,对于指定的输入,总是会返回确定的结果。

e) 索引的属主如果没有了在 FBI 索引里面使用的函数的执行权限,那么这个 FBI 索引会变成 DISABLED.

f) 在创建索引得函数里面不能使用 SUM 等总计函数。

4.3 在线索引创建和重建

索引创建与重建在 Oracle8i中可联机实现,而不必中断对基表可能实施插入、更新或删除操作。创建与重建索引是一件非常耗时的工作,尤其当基表很大时。在 Oracle8i 之前,在索引创建与重建期间,不允许对其基表进行任何 DML操作。

注:在线索引构建期间,尽管能 UPDATE(更新)基表,但根据 Oracle 的建议,最好不要采取会影响到大部分数据行的操作。

4.4 使用可传输的表空间实现数据在数据库间的移动

对于可传输的表空间这一特性来说,允许我们把一个或多个表空间从一个数据库移动或复制到另一个数据库。

可传输的表空间有下面几点限制:

源和目标数据库必须处于同一个硬件平台。

源和目标数据库的数据库块大小必须一样,而且必须采用同一个字符集。

如果表空间名和目标数据库上的表空间名雷同,这个表空间就不能被传输到目标数据库。

数据库表空间迁移的基本过程是:令表空间为只读,并复制相应的数据文件,然后利用 EXP/IMP,从数据字典中卸载元数据,并把它装载到目标数据库。

表空间迁移前首先要检测待迁移的表空间是否自包含。我们可以通过执行内置的 PL/SQL过程 DBMS_TTS.TRANSPORT_SET_CHECK 判断表空间是否自包含:

以下是表空间迁移的操作步骤,1-5 步操作在源数据库表空间操作完成,6、7、8步在目的数据库表空间操作完成。

4.将待迁移的表空间下的所有数据文件进行操作系统级的拷贝,复制到目的数据库操作系统硬盘下。

在数据库undo表空间文件损坏。或者undo表空间文件缺失的情况下。无法打开数据库。

这两种情况都能够视为一种情况处理,解决方法一样。

场景:在23:10的时候新建一个undo表空间undotbs02,并切换至该undo表空间。

此时再闪回数据库至23:10。

(注:闪回数据库之后须要resetlogs)

我要回帖

更多关于 如何创建表空间 的文章