1. 下载并安装oracle10。
(1)一路默认安装,设置好自己的密码。安装完成要运行database configration assistant图形工具创建数据库。有的是默认安装完就运行,如果默认不运行,自己在开始菜单中找到该选项运行(在windows下时)
2. 登录同机sqlplus客户端。
(1)打开命令行控制台,在其中输入sqlplus 命令。
(2)系统会提示输入登陆用户名和密码,一次输入。如用户名:SYSTEM 密码:yourpwd。
当出现 SQL> (在dos控制台下)时,表示登陆成功。
3.创建一个用户。
(1)在登陆sqlplu后,输入:create user somename identified by pwd;
即创建了一个用户名为somename,密码为 pwd 的用户
(2)为用户授予权限: grant create session to somename ; // 授予 somename 连接数据的权限
或为用户授予角色:grant dba to somename;
(3)修改用户密码:alter user somename identified by otherpwd;
(4)删除用户:drop user somename;
(5)显示用户所拥有的表:select table_name from dba_tables where owner='somename';
(6)显示所有用户:select username from dba_users;
4.查看当前登陆相关信息
(1)查看当前登录数据库
show parameter db_name; 或 select name from v$database;
(2)查看当前sid和servicename
select sid from v$mystat where rownum <=1;
show parameter service
(3) 查看数据库中的所有表 select * from tab;
(4)查看当前数据库版本 select * from product_component_version
5.新建表以及数据操作同标准sql在这里不再赘述。
(1)但是oracle很多地方还是很让人恶心的,比如设定主键自动增长机制。需要用的sequence和trigger,即序列和触发器。这要比起mysql的auto_increment和sql server的identity(1,1)的方便性比较,简直就是十分值得抱怨的事情。好了,现在说怎么实现orcale建表主键的自动增长的例子
a)建立表 create table xtest(id int not null primary key, name varchar(20));
b)建立序列
create sequence xtest_seq minvalue 1 maxvalue 999999999 start with 1 increment by 1 cache 20;
c)建立触发器
create or replace trigger xtest_trigger before insert on xtest for each row when(new.id is null) begin select xtest_seq.nextval into :new.id from dual; end; /
分析原理:主键自动增长是用sequence来完成的,这需要我们在插入的时候指定用哪个sequence来给予值。于是就需要触发器来做这些事情。触发器类似与存储过程,但负责监听。比如上面的触发器监听xtest表的插入事件。当然,我们也可以不用触发器,直接insert into xtest(id, name) values(xtest_seq.nextval, 'johntor');了事。但是谁又会喜欢去写如此的sql语句呢!
(2)显示表设计
desc 表名
这个mysql也有,不用多说。全称命令是describe。
(3)显示已经建立的sequence
select * from user_sequences;
可以有where语句如 where sequence_name = 'YOUR_SEQ_NAME'
(4)关于删除表
我们都会知道用sql如:drop table tablename; ok,执行后,数据库提示你执行成功了,但是在查询一下你的所有表select * from tab;会发现,多了一个类似“ BIN$YkN4S58dTPC/vBboMCNh0A==$0”名字的表 。奇怪吗,其实也不,自己在第一时间想到的就是oracle为了安全起见,让你恢复表数据用 的,事实也的确如此。
a)我们用flashback table "BIN$YkN4S58dTPC/vBboMCNh0A==$0" to before drop;命令乐意恢复我们刚才删除的表。也就是说,我们用的删除语句把一个结构相同而其重命名的表放进了回收站。
b)drop table tablename purge; 可以绕过回收站,直接删除。这样就不能恢复了。
c)执行 purge recyclebin; 命令可清空当前用户的回收站。执行purge table tablename; 命令可以清除回收站内指定的表。记住这里的tablename不是那个很长的字符串,而是自己原来删除前表的是进名字。
6.关于表空间
(1)查询现有表空间情况的sql语句如下:
select total.tablespace_name tsname, count(free.bytes) nfrags, nvl(max(free.bytes)/1024,0) mxfrag, total.bytes/1024 totsiz, nvl(sum(free.bytes)/1024,0) avasiz, (1-nvl(sum(free.bytes),0)/total.bytes)*100 pctusd from dba_data_files total, dba_free_space free where total.tablespace_name = free.tablespace_name(+) group by total.tablespace_name, total.bytes;
当然可以用一句话来看都有什么表空间 select tablespace_name from dba_data_files;
(2)表空间的概念:一个数据库从逻辑上来说是由一个或多个表空间所组成,表空间是数据库中物理编组的数据仓库。每一个表空间是由段所组成,一个表空间存放一个或多个数据库的物理文件。一个数据库中的数据被逻辑地存储在表空间上。
更直观一点说,表空间就是由一个或几个数据文件构成的逻辑存储单元。
(3)创建表空间:
create tablespace data01 datafile 'C:/data/data01.dbf' size 500M uniform size 128k; #默认为64k
(4)删除表空间:drop tablespace data01 including contents and datafiles;
(5)修改表空间大小:alter database datafile 'C:/data/data01.dbf' resize 100M;
(6)移动表到另一个表空间:alter table ztest move tablespace data01;
上面ztest为表的名字data01为表空间的名字
(7)显示属于一个表空间的所有内容信息以及所有者:
select distinct owner,segment_name, segment_type from dba_extents where tablespace_name='DATA01';
(8)显示一个表属于哪个表空间:select tablespace_name from tabs where table_name = 'ZTEST';
通过上面关于表空间的一些讲述,我们就会想到在建表的时候,就为表直接指定表空间了,如下:
create table zztest(id int) tablespace USERS;
下面是我没有测试过的,但应该没有什么问题的技巧:
a)给表空间添加数据文件:alter tablespace date01 add datafile d:/data/date02.dbf size 50m;
b)设置数据文件自动扩展:
alter database datafile d:/data/date02.dbf autoextend on next 10m maxsize 500m;