第一步:创建脚本文件。
在Oracle数据库重,创建脚本文件的方式很多。如可以直接在记事本中创建脚本文件,也可以通过SQL*Plus工具直接创建。不过,笔者的意见是,在SQL*Plus中直接创建脚本文件的话,比较麻烦。这主要是因为在SQL*Plus工具中,命令编辑能力非常有效。如不能够使用键盘上的箭头键定位输入的位置,不能够使用DEL键删除输入的内容等等。而且阅读起来也比较困难。
第二步:编辑脚本文件。
在我们使用脚本文件的时候,往往需要根据实际情况,对其进行稍微的调整。对脚本文件进行编辑,也有两种方式。一是通过SQL*Plus工具,二是第三方独立的脚本编辑软件。
对于一些调整不大的脚本文件,我们可以直接利用SQL*Plus工具打开,然后进行编辑。但是,对于需要进行大量修改的脚本文件,则笔者建议数据库管理员采用第三方独立的脚本编辑软件。原因很简单,就如同上面所说的那样,SQL*Plus工具脚本命令编辑功能非常的薄弱。若采用这个工具对现成的脚本语句进行编辑的话,则可能工作量还是重新编写一个来的轻。所以,数据库管理员要根据实际的情况,选择合适的脚本编辑工具。
另外,在编辑的过程中,要注意语法的正确性。特别是要注意,不能够改变其固有的格式。如不要不小心删除了最后的“/”符号结束。
第三步:运行脚本文件。
脚本建立好之后,如何运行脚本呢?在Oracle系统中也提供了许多方式。数据库管理员可以根据自己的使用习惯来进行选择。
一是通过Start语句来调用脚本文件。其语法是Start Filemame[相关参数]。在运行这个命令的时候,需要注意几个问题。
1、脚本文件的扩展名问题。上面在建立脚本文件的时候,笔者就跳掉过,为了在SQL*Plus等工具中可以直接调用这个脚本文件,最好能够把扩展名改为Oracle数据库能够接受的扩展名。默认情况下,扩展名设置为SQL即可。
2、脚本文件的路径问题。若用户在利用Start调用脚本文件的时候,若没有清楚的指名保存路径的话,则SQL*Plus工具会现在当前的目录中进行查找;若没有的话,则会根据环境变量中确定的目录中进行查找。而一般情况下,我们把脚本文件都会独立存放。所以,在使用Start命令执行脚本文件的时候,最好能够注明脚本文件的绝对路径名。防止语句执行错误。
另外@命令也可以起到跟Start命令一样的作用。只不过,前者的使用范围更广一点。@命令可以脱离SQL*PLUS工具而使用。如可以直接在微软操作系统中的命令行方式下使用。当然,这操作系统要事先部署了Oracle数据库环境。
二是可以直接利用SQL*Plus工具打开文本文件,执行脚本语句。然后点击“文件”、“执行”命令执行这个脚本语句。这种方式的好处就是,系统会主动提示用户需要输入的参数。
总之,脚本文件是我们管理Oracle数据库的一大利器。我们好好利用脚本文件,可以提高Oracle数据库的管理效率。毕竟,每次在需要的时候,都去编写命令是一件很麻烦的事情。而脚本文件的最大好处,就是可以提高语句的重复利用,节省我们编写语句、调试测试的时间。
② 怎么管理oracle的表空间和数据文件
SQL> conn sys/xin as sysdba
已连接。
SQL> set wrap off
SQL> set linesize 100
1. 一些基本的操作
(1) 查看表空间:
SQL> select * from v$tablespace;
(2) 查看数据文件:
SQL> select * from v$datafile;
(3) 查看tablespace 和data files之间的对应关系(通过表空间的号连接在一起):
SQL> select t1.name,t2.name
2 from v$tablespace t1, v$datafile t2
3 where t1.ts#=t2.ts#
4 ;
(4) 更改表空间
SQL> alter tablespace users
2 add datafile 'E:\ORACLE\ORADATA\XINER\USERS02.DBF' size 10m;
表空间已更改。
2. 管理表空间
在oracle 里将表空间分为系统表空间和非系统表空间。
(1) 系统表空间包括系统表,数据字典,以及系统回滚段等信息。
查看系统回滚段:
SQL> select * from dba_rollback_segs;
(2) 非系统表空间用来分离段(分开临时数据和永久性数据,索引和表放在不同的表空间等等)可以给系统的性能带来
好处,同时可以控制分配给用户的空间限额。
控制用户对空间的使用:
SQL> alter user HR
2 quota 10m on users;
用户已更改。
(3) 如何创建表空间:([]均表示可选)
create tablespace xxx
[datafile 'xxx']---OMF时可以不指定
[size xxx--kb,mb]
[extent management local/dictionary]
[default storage(xxx)]
dictionary-managed tablespaces在oracle 9i 里已经不建议使用。
SQL> create tablespace ice
2 datafile 'e:\oracle\oradata\xiner\ice.dbf' size 5m
3 extent management dictionary
4 default storage(
5 initial 100k
6 next 100k
7 pctincrease 10)
8 offline;
表空间已创建。
如果表空间管理指定为Local型,则不能使用default storage。此时不会和数据字典表打交道,不会和系统表产生
资源争用,也不会产生回滚数据(因为不涉及修改系统表),其次也不会有递归的资源争用。
SQL> create tablespace ice1
2 datafile 'e:\oracle\oradata\xiner\ice1.dbf' size 5m
3 extent management local
4 uniform size 1m;
表空间已创建。
SQL> create tablespace ice2
2 datafile 'e:\oracle\oradata\xiner\ice2.dbf' size 5m
3 extent management local autoallocate;
表空间已创建。
(4) Undo 表空间用来存储undo段,不能包括其他的数据对象,使用locally管理。
undo 段主要用来保存数据改变的旧值,可以回滚transcation(rollback)。
SQL> show parameter undo
SQL> create undo tablespace ice3
2 datafile 'e:\oracle\oradata\xiner\ice3.ora' size 5m
3 extent management local
4 uniform size 1m; //此时不能定义uniform size
uniform size 1m
*
ERROR 位于第 4 行:
ORA-30024: CREATE UNDO TABLESPACE 的说明无效
SQL> del 4
SQL> run
1 create undo tablespace ice3
2 datafile 'e:\oracle\oradata\xiner\ice3.ora' size 5m
3* extent management local
表空间已创建。
不能在回滚表空间建立表对象(不能放其他的数据对象):
SQL> create table tt1
2 (id int)
3 tablespace ice3;
create table tt1
*
ERROR 位于第 1 行:
ORA-30022: 无法在撤消表空间中创建段
(5) 临时表空间用来支持排序,不能包括永久的数据对象,建议使用locally管理。
SQL> create temporary tablespace ice4
2 tempfile 'e:\oracle\oradata\xiner\ice4.ora' size 5m
3 extent management local;
表空间已创建。
SQL> create table tt1
2 (id int)
3 tablespace ice4;
create table tt1
*
ERROR 位于第 1 行:
ORA-02195: 尝试创建的PERMANENT对象在TEMPORARY表空间中
(6) 缺省的临时表空间:
SQL> alter database default temporary tablespace ice4
数据库已更改。
临时表空间不可以被置为offline,也不能指定为read only,不可以被删除,除非用另外一个表空间代替它。
SQL> alter talbespace ice4 offline
alter talbespace ice4 offline
*
ERROR 位于第 1 行:
ORA-00940: 无效的 ALTER 命令
SQL> alter tablespace ice4
2 read only;
alter tablespace ice4
*
ERROR 位于第 1 行:
ORA-03217: 变更 TEMPORARY TABLESPACE 无效的选项
(7) offline状态:对数据文件改名or搬动数据文件的位置or对数据库进行部分的修复
(7) offline状态:对数据文件改名or搬动数据文件的位置or对数据库进行部分的修复
SQL> alter tablespace users offline;
表空间已更改。
SQL> alter tablespace users online;
表空间已更改。
不可以置为offline状态的表空间包括:system表空间(如果要对系统表空间的文件进行改变则要关闭数据库);
包括active undo 段的表空间;缺省的临时表空间
(8) read only 表空间:对表空间只能进行读操作;数据对象可以从表空间删除
SQL> alter tablespace users read only;
表空间已更改。
(9) 删除表空间:
SQL> create table tt1
2 (id int)
3 tablespace ice;
表已创建。
SQL> drop tablespace ice1;
表空间已丢弃。
SQL> drop tablespace ice2
2 including contents and datafiles;
表空间已丢弃。
(10) resize表空间:自动扩张(autoextend on)、手动(resize)
3. 管理数据文件
(1) 移动data files:
表空间必须是offline(使用alter tablespace xxx rename datafile 'xx' to 'xx');
目标数据文件必须已经存在;
如果是不能处于offline状态的表空间则要关闭数据库,将其启动到mount状态,同时目标数据文件必须已经存在。
(使用alter database rename file 'xx' to 'xx')
(2) 配置OMF文件来创建表空间的时候DB_CREATE_FILE_DEST会将数据文件存放在缺省的位置。如果想要更改位置则用
alter system set db_create_file_dest='xx';
用OMF创建表空间:create tablespace xxx; 删除:drop tablespace xxx;