1. 开始—运行—sqlplusw—system—superich--
2. 创建临时表空间:
SQL> create temporary tablespace test_temp
2 tempfile 'E:/oracle/oradata/Oracle9i/anmei.dbf'
3 size 32m
4 autoextend on
5 next 32m maxsize 2048m
6 extent management local;
删除临时表空间:
SQL> drop tablespace test_temp; (including contents and datafiles)
Oracle临时表空间主要是用来做查询和存放一些缓存的数据的,磁盘消耗的一个主要原因是需要对查询的结果进行排序,如果没有猜错的话,在磁盘空间的(内存)的分配上,Oracle使用的是贪心算法,如果上次磁盘空间消耗达到1GB,那么临时表空间就是1GB,如果还有增长,那么依此类推,临时表空间始终保持在一个最大的上限。
Oracle临时表空间暴涨的现象经过分析可能是以下几个方面的原因造成的。
1. 没有为临时表空间设置上限,而是允许无限增长。但是如果设置了一个上限,最后可能还是会面临因为空间不够而出错的问题,临时表空间设置太小会影响性能,临时表空间过大同样会影响性能,至于需要设置为多大需要仔细的测试。
2.查询的时候连表查询中使用的表过多造成的。我们知道在连表查询的时候,根据查询的字段和表的个数会生成一个迪斯卡尔积,这个迪斯卡尔积的大小就是一次查询需要的临时空间的大小,如果查询的字段过多和数据过大,那么就会消耗非常大的临时表空间。
3.对查询的某些字段没有建立索引。Oracle中,如果表没有索引,那么会将所有的数据都复制到临时表空间,而如果有索引的话,一般只是将索引的数据复制到临时表空间中。
针对以上的分析,对查询的语句和索引进行了优化,情况得到缓解,但是需要进一步测试。
总结:
1) SQL语句是会影响到磁盘的消耗的,不当的语句会造成磁盘暴涨。
2) 对查询语句需要仔细的规划,不要想当然的去定义一个查询语句,特别是在可以提供用户自定义查询的软件中。
3) 仔细规划表索引。
3.创建数据表空间:
SQL> create tablespace test_data
2 logging
3 datafile 'E:/oracle/oradata/Oracle9i/anmei001.dbf'
4 size 32m
5 autoextend on
6 next 32m maxsize 2048m
7 extent management local;
删除数据表空间:
SQL> drop tablespace test_data; (including contents and datafiles)
4.创建用户并指定表空间
SQL> create user anmei
2 identified by "123"
3 default tablespace test_data
4 temporary tablespace test_temp;
5.给用户授权
SQL> grant connect,resource,unlimited tablespace to anmei;
授权成功。
也可以一步一步的授权:
SQL> grant connect to anmei;
授权成功。
SQL> grant resource to anmei;
授权成功。
SQL> grant unlimited tablespace to anmei;
授权成功。
6.删除用户权限
SQL> revoke connect,resource,unlimited tablespace from anmei;
撤销成功。
7.连接用户
SQL> conn anmei/123;
已连接。
8.删除用户:(先取得管理员权限再进行用户删除操作)
SQL> conn system/superich;
已连接。
SQL> drop user anmei;
用户已丢弃
用户中还有用户时:
//此时会报错
SQL> drop user anmei;
drop user anmei
*
ERROR 位于第 1 行:
ORA-01922: 必须指定 CASCADE 以删除'ANMEI'
正确的方法是:
SQL> drop user anmei cascade;
用户已丢弃
9.show
1)显示当前用户
SQL> show user;
USER 为"ANMEI"
2)显示错误
SQL> show error;
没有错误。
10.创建表
SQL> create table mytable(
2 mno number(7),
3 mname varchar2(10),
4 msex varchar2(4),
5 mage number(5));
表已创建。
删除表:
SQL> drop table mytable;
表已丢弃。
11.alter的使用
1)删除字段(列名)
SQL> alter table mytable
2 drop column mage;
表已更改。
2)增加字段(列名)
SQL> alter table mytable
2 add mage number(5);
3)修改一个字段(列名)的数据类型(一般限于修改长度,修改为一个不同类型时有诸多限制)
SQL> alter table mytable
2 modify mage number(10);
4)给字段(列名)改名
SQL> alter table mytable
2 rename column mage to age;
5)给表改名
SQL> alter table mytable rename to mytab;
6)设置主键
SQL> alter table mytab
2 add constraint PK_m primary key (mno);
7)设置外键
SQL> alter table mytab
2 add constraint PK_my foreign key (yid) references mytable (yid);
12.创建序列
SQL> create sequence myseq
2 increment by 1 --每次加1
3 start with 1 --从1开始
4 maxvalue 10000 --最大值为10000
5 minvalue 1 --最小值为1
6 nocycle --一直累加,不循环
7 cache 20
8 noorder; --并行时取得序列的顺序
使用序列:
SQL> select myseq.nextval from dual;
SQL> select myseq.currval from mytab;
SQL> select myseq.nextval from mytab;
注意:
1) 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。明白?
2) 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。
3) 你或者是该sequence的owner,或者有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create .
Alter sequence 的例子
ALTER SEQUENCE emp_sequence
INCREMENT BY 10
MAXVALUE 10000
CYCLE -- 到10000后从头开始
NOCACHE ;
13.连接操作符:” || ”
SQL> select 'My name is '||'anmei' from dual;
'MYNAMEIS'||'ANM
----------------
My name is anmei
14.复制表 (仅限于oracle)
利用已知表建一个新表:
1))只会把非空的约束复制过来,其他的约束要自己添加。
SQL> create table myemp
2 as select * from emp where sal>1500;
SQL> create table my
2 as select * from scott.emp;
3
2))只要表结构,不要表中的数据
SQL> create table myempa
2 as select * from emp where 1=2;
(这是一个小技巧,利用永不等式提取零条数据,在JDBC的学习中会用到
where 1=1 的形式,注意体会)
15.创建同义词
SQL> create synonym sy for scott.emp;
同义词已创建。
SQL> select * from sy;
创建公有同义词
SQL> create public synonym ps for scott.emp;
同义词已创建。
SQL> drop public synonym ps;
同义词已丢弃。