Oracle安装的一些事项-初步认识Oracle

安装数据库
关闭防火墙
断开网络连接

数据库安装好后需要注意的配置文件位置

Enterprise Manager Database Control URL - (orcl) :http://lyfy-20110626RI:1158/em
数据库配置文件已经安装到E:\oracle\product\10.2.0,同时其他选定的安装组件也已经安装到 E:\oracle\product\10.2.0\db_1.iSQL*Plus URL 为:http://Localhost:5560/isqlplusiSQL*Plus DBA URL 为:http://Localhost:5560/isqlplus/dba
选中“带样本方案的数据库"安装到最后

oracle的卸载

1 执行卸载
2 删除残留文件 如果无法删除则进入安全模式删除
3 删除注册表信息

监听服务,最经常使用的服务,容易出错.

错误一:注册表优化软件 删除了监听服务的注册表
监听服务的注册项

错误二:网络环境发生改变
比较常见的是更改计算机名(我的电脑-属性-计算机名)
此时需要修改网络配置文件
listener.ora 和 tnsnames.ora 配置文件的计算机名称
之后可能还要用到网络名称的注册  oracle net manager

数据库操作SQL语句

DML                  Data manipulation language  检索和修改
DCL                   Data Control language            定义数据库权限
DDL                   Data definition language        定义数据的结构 创建 修改 删除数据库对象

查询语法

SELECT [DISTINCT] *| 字段[别名] [,字段[别名]]
FROM 表名[别名]
[WHERE 条件(s)]
[ORDER BY 字段 [ASC|DESC] [,字段[ASC|DESC]]…]];
;

数据库函数
单行函数
字符函数

对字符串操作的函数
UPPER(字符串 | 列); 变大写
LOWER(字符串 | 列); 变小写
ININCAP(字符串 | 列); 开头字母大写
LENGTH(字符串 | 列); 给出字符串长度
REPLACE(字符串 | 列); 进行替换
SUBSTR(字符串 | 列 ,开始点 [,结束点));

日期函数

SYSDATE 当前日期

LAST_DAY(日期);
NEXT_DAY{日期,星期数};
ADD_MONTHS(日期,数字);
MONTHS_BETWEEN(日期1,日期2);

数字函数
ROUND 四舍五入
TRUNC 舍弃指定位置的内容
MOD   取模 取余数

转换函数
TO_CHAR
TO_DATE
TO_NUMBER

ORACLE 表操作

创建表格

CREATE TABLE 表名 (
名              类型                   默认值,
名              类型                   默认值,
名              类型                   默认值
);

复制表格

CREATE TABLE  新表名AS 子语句;

CREATE TABLE BOOKINFO2 AS SELECT * FROM BOOKINFO WHERE XXX
若想只复制格式不复制数据 可以在where后加上一个不可能的条件

重命名

RENAME 旧表名 TO 新表名;

表的删除

DELETE; 命令删除的数据可以 ROLLBACK回来
若想不能回滚 使用 TRUNCATE TABLE 名称;


表中数据的操作 DML manipulation

增加数据

INSERT INTO 表名称 [(字段1, 字段2..)], VALUES [ (值1, 值2,…)];
数据类型 数字 123 字符串 要是用 “”括起来 日期 是用已有的格式 或者用 TO_DATE函数


修改数据

UPDATE 表名称 SET 更新内容1 = 更新值1, … [WHERE 更新条件(S)];

删除数据

DELETE表名称 [WHERE删除条件(s)];

回收站 闪回技术

查看回收站

SHOW RECYCLEBIN;
闪回
FLASHBACK TABLE表名 BEFORE DROP;

完全删除

PURGE TABLE 表名;

清空回收站
PURGE RECYCLEBIN;
删除时命令后加purge 可以彻底删除

修改表
增加字段

ALTER语句

ALTER TABLE 表名称 ADD ( 列名称 数据类型 [DEFAULT 默认值],
                                                        列名称 数据类型 [DEFAULT 默认值],…
                                                                 );
修改格式

ALTER TABLE 表名称 MODIFY ( 列名称 数据类型 [DEFAULT 默认值],
                                                        列名称 数据类型 [DEFAULT 默认值],…
                                                                 );


Oracle中没有自增数字,要实现自增功能,需要用到序列功能
先创建表格
再创建序列
把序列应用到表格中


  首先,你要有一张表!

  CREATE TABLE example(

  ID Number(4) NOT NULL PRIMARY KEY,

  NAME VARCHAR(25),

  PHONE VARCHAR(10),

  ADDRESS VARCHAR(50) );

  然后,你需要一个自定义的sequence

  CREATE SEQUENCE emp_sequence

  INCREMENT BY 1 -- 每次加几个

  START WITH 1 -- 从1开始计数

  NOMAXVALUE -- 不设置最大值

  NOCYCLE -- 一直累加,不循环

NOCACHE -- 不建缓冲区


  一旦定义了emp_sequence,你就可以用CURRVAL,NEXTVAL

  CURRVAL=返回sequence的当前值

  NEXTVAL=增加sequence的值,然后返回sequence值


创建触发器的SQL语法

  DELIMITER |
  CREATE TRIGGER `<databaseName>`.`<triggerName>`
  < [ BEFORE | AFTER ] > < [ INSERT | UPDATE | DELETE ] >
  ON <tableName>
  FOR EACH ROW
  BEGIN
  --do something
  END |


如何查找、删除表中重复的记录

方法原理:
1、Oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,
rowid确定了每条记录是在ORACLE中的哪一个数据文件、块、行上。
2、在重复的记录中,可能所有列的内容都相同,但rowid不会相同,所以只要确定出重复记录中
那些具有最大rowid的就可以了,其余全部删除。
实现方法:
SQL》 create table a (
2 bm char(4), --编码
3 mc varchar2(20) --名称
4 )
5 /
表已建立。
SQL》 insert into a values(‘1111’,‘1111’);
SQL》 insert into a values(‘1112’,‘1111’);
SQL》 insert into a values(‘1113’,‘1111’);
SQL》 insert into a values(‘1114’,‘1111’);
SQL》 insert into a select * from a;
插入4个记录。
SQL》 commit;
完全提交。
SQL》 select rowid,bm,mc from a;
ROWID BM MC
------------------ ---- -------
000000D5.0000.0002 1111 1111
000000D5.0001.0002 1112 1111
000000D5.0002.0002 1113 1111
000000D5.0003.0002 1114 1111
000000D5.0004.0002 1111 1111
000000D5.0005.0002 1112 1111
000000D5.0006.0002 1113 1111
000000D5.0007.0002 1114 1111
查询到8记录。
查出重复记录
SQL》 select rowid,bm,mc from a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);
ROWID BM MC
------------------ ---- --------------------
000000D5.0000.0002 1111 1111
000000D5.0001.0002 1112 1111
000000D5.0002.0002 1113 1111
000000D5.0003.0002 1114 1111
删除重复记录
SQL》 delete from a a where a.rowid!=(select max(rowid) from a b where a.bm=b.bm and a.mc=b.mc);
删除4个记录。
SQL》 select rowid,bm,mc from a;
ROWID BM MC
------------------ ---- --------------------
000000D5.0004.0002 1111 1111
000000D5.0005.0002 1112 1111
000000D5.0006.0002 1113 1111
000000D5.0007.0002 1114 1111
desc table;检查表结构
select * from tab where tabtype=‘TABLE’;显示当前用户下的所有表。
select count(*) from table;显示此表的数据行数;
spool c:\tony.txt;日记路径
spool off;关闭记录后可以看到日记文件里的内容。
Alter add alter modify alter drop
alter table stu add(classid number(2));添加字段
alter table stu modify(xm varchar2(12));修改字段的长度
alter table stu drop column sal;
drop table stu;
rename student to stu;
alter table student drop column sal; alter table stu add(salary number(7,2));
insert into stu values(‘A001’,‘张三’,‘男’,‘01-5月-05’,10);
insert into stu(xh,xm,sex) values (‘A003’,‘JOHN’,‘女’);
insert into student(xh,xm,sex,birthday) values (‘A004’,‘MARTIN’,‘男’,null);
修改
Update
UPDATE STU SET SEX=’女’ where xh=’A001’;
Update student set set classid=20 where birthday is null;
Delete from stu; drop table student; delete from stu where xh=’A001’;
update stu set sex=‘女’ where xh=‘A001’;
update student set sex=‘男’,birthday=‘1980-04-01’where xh=‘A001’;
update student set classid=20 where birthday is null;
delete from stu;drop table student;delete from stu where xh=‘A001’;
truncate table stu
truncate table stu;删除表中的所有记录,表结构还在不写日记无法找回记录
select * from stu;
select * from student where classid like ‘1%’;
select * from student where xh like ‘%A%’;
select * from student where xh like ‘A%’;
select * from student where xh like ‘%A’;
select * from student where xh = ‘A%’;
select * from student order by birthday;
select * from student order by birthday desc,xh asc; --按birthday 降序 按xh升序(asc/默认)  order by 排序 desc 降序 asc 升序
select * from student where sex=‘女’ or birthday=‘1999-02-01’;
select * from student where sex=‘女’ and birthday=‘1999-02-01’;
select * from student where salary 》 20 and xh 《》 ‘B002’; (!=)
oracle
函数的学习
单行函数 返回值只有一个
分组函数 返回值是多条记录
group by
sum
avg
select sysdate from dual;dual哑元素 没有表需要查询的时候
select xm||‘-----’||classid from stu;
select 1+1 from dual;
select job,next_date,next_sec,failures,broken from user_jobs;
show parameter job_queue_processes;
alter system set job_queue_processes=5;
select owner,object_name from dba_objects where object_type=‘DATABASE LINK’;
select * from dual@gis3; 判断是否创建
select object_name,object_type
from user_objects
order by object_type; --用户所拥有的对象
select object_name,object_type
from user_objects
WHERE object_type=‘TABLE’; --用户所拥有的表
另外一种方法
select table_name from user_tables;
select object_name,object_type
from user_objects
WHERE object_type=‘INDEX’; --用户所拥有的索引
INSERT INTO Store_Information (store_name, Sales, Date)
SELECT store_name,Sales, Date
FROM Sales_Information
WHERE to_char(date,‘yyyy’)=1998;
exp/imp help=y 显示exp/imp命令下的参数
imp tony/gisinfo file=tony.dmp log=loga show=y full=y
if--then--end if的使用if v_test=1 then begin 。..。. end; end if;
while--loop--end loop的使用if v_test=1 then begin 。..。..。.end;end if;
CASE的使用
update jzqld1 set bcrq=case
when id like ‘3%’ then ‘09010102’
when id like ‘4%’ then ‘09010204’
else ‘09010805’
end;
删除用户drop user tony/create user tony
showdown abort; startup;
希望在scott用户下能看到mk用户中test表的数据???
connect mk/m123
grant select on test to scott; //授权scott能select
connect scott/tiger
select * from mk.test;
create synonym mtest for mk.test; //为表建立的
//可以为任何对象建立同义词
select * from mtest; //相当于select * from mk.test;
位图索引
create bitmap index ind_aa on emp(job);
create index ind_dept on dept(dname,loc);
//联合索引 分次序的
create index ind_dept1 on dept(loc,dname);
show parameter db_name数据库名
DBA要及时查看数据库中数据文件的状态(如被误删除),根据实际情况决定如何进行处理,检查数据文件的状态的SQL如下:
select file_name,status from dba_data_files;
如果数据文件的STATUS列不是AVAILABLE,那么就要采取相应的措施,如对该数据文件进行恢复操作,
或重建该数据文件所在的表空间。
//给用户授予权限
grant connect,dba,resource to testserver_user;
//创建用户并指定表空间
create user ORACLE8I identified by ORACLE8I
default tablespace ORACLE8I
temporary tablespace test_temp ;
//创建数据表空间
create tablespace oracle8i
logging
datafile ‘E:\oracle\product\10.2.0\oradata\testserver\test_data01.dbf’
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
//创建临时表空间
create temporary tablespace test_temp
tempfile ‘E:\oracle\product\10.2.0\oradata\testserver\test_temp01.dbf’
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
表锁 : lock table emp in exclusive mode;
对emp表加的表锁
一般不使用表锁;
alter table aa move tablespace bb

猜你喜欢

转载自myohmy1.iteye.com/blog/1343846