安装
- 选择安装软件和配置数据,不要选只安装软件的那一项(如果选只安装软件,那后面我需要单独去创建数据库,还不如在安装软件的同时创建一个数据库)
- 记得设置并记住口令,即sys账户的密码
- 先决条件阶段如果提示内存检查失败,则cmd运行
regedit
进入注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\LanmanServer\Parameters 选中Parameters,在右边名称中找到AutoShareWks 项,在其右键菜单中 ,点击修改,将其“数值数据(V):”由原来的0改为1,然后点击确定。重启电脑重新安装,安装完记得改回来 - 字符编码选择Unicode(AL32uft8)
安装后
- 连接时提示无监听程序
确保打开了监听服务(打开Windows服务可以看到Oracle有七八个服务,有一个带有listener的就是监听服务),然后配置监听程序,product\11.2.0\dbhome_1\NETWORK\ADMIN
目录下有个tnsnames.ora
配置文件
区别
Oracle的概念跟其他的数据库有很大的不同,它的结构图如下
image.png
image.png
数据库
Oracle一般只创建一个数据库,也就是说一个ip+port
(Oracle端口默认1521)一般只创建一个数据库(当然也可以创建多个数据库,使用SID即服务ID来区分,也叫作全局数据库名,默认创建的数据库一般SID为orcl)。查询当前数据库名select name from v$database;
实例
类似于其他数据库的连接,实例名也叫SID,查看当前实例名select instance_name from v$instance;
完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。
- 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等);
- Oracle数据库实例则是一组Oracle后台进程/线程以及在服务器分配的共享内存区。
在启动Oracle数据库服务器时,实际上是在服务器的内存中创建一个Oracle实例(即在服务器内存中分配共享内存并创建相关的后台内存),然后由这个Oracle数据库实例来访问和控制磁盘中的数据文件。Oracle有一个很大的内存快,成为全局区(SGA)。
表空间
Oracle数据库是通过表空间来存储物理表的,一个数据库实例可以有N个表空间,一个表空间下可以有N张表。有了数据库,就可以创建表空间。
表空间(tablespace)是数据库的逻辑划分,表空间的概念类似于mysql的数据库
创建表空间
create tablespace db_test //表空间名
datafile 'D:\oracle\product\10.2.0\userdata\db_test.dbf' //表空间路径地址
size 50m //大小
autoextend on; //空间自动增长
next 10m
maxsize 500m
extent management local;
用户
在安装Oracle的过程中会要求输入口令,其实就是为最高用户(sys)设置密码,sys账户就相当于mysql的root,所以一定要设置并记住这个口令
创建用户
CREATE USER username
IDENTIFIED BY password
DEFAULT TABLESPACE db_test
TEMPORARY TABLESPACE temp;
授予权限(角色)
GRANT CONNECT TO username; //临时用户
GRANT RESOURCE TO username; //一般用户
GRANT dba TO username; //管理员
撤回权限(角色)
Revoke dba from username
连接类型
- SYSDBA
管理员用户 - Normal
一般用户
表
创建表
create table t_stu(
stuid number(10) primary key,
stuname varchar2(20) not null,
stusex varchar2(2) default '男' check(stusex in('男','女'))
);
驱动和URL
RDBMS | JDBC驱动程序名称 | URL格式 |
---|---|---|
MySQL | com.mysql.jdbc.Driver | jdbc:mysql://hostname/databaseName |
ORACLE | oracle.jdbc.driver.OracleDriver | jdbc:oracle:thin:@hostname:portNumber:databaseName |
PostgreSQL | org.postgresql.Driver | jdbc:postgresql://hostname:port/dbname |
oracle可以一个用户指定多个表空间吗
只能设置一个default tablespace,但是有一个角色叫做resource,如果将这个角色授予了用户,用户默认就有了一个unlimited tablespace权限,拥有这个权限的用户将无限使用表空间,即可以使用任意表空间。比如创建表的时候,不指定tablespace默认将该表放在default tablespace里面。如果加入tablespace参数 ,就存放在指定的表空间。表空间是公共区域,大家都能用的
Oracle创建序列
Oracle中的主键不能像mysql一样指定自增,而是通过创建sequence对象来获得唯一的主键,创建的sequence可以被整个表空间共享,通过调用sequence的nextval方法可以获得一个唯一的主键(currval 返回当前值)
//创建sequence
create sequence auto_id
start with 1//开始值
increment by 1//增长值,正数就是递增,负数递减
[maxvalue | nomaxvalue]//设置或不设置最大值
[minvalue | nominvalue]//设置或不设置最小值
[{CYCLE | NOCYCLE}] //循环/不循环
[{CACHE n | NOCACHE}];//分配并存入到内存中
//查询,必须先使用nextval才能使用currval
select auto_id.nextval from dual;
select auto_id.currval from dual;
//使用sequence
insert into student(id,name) values(auto_id.nextval,'xiaoming');
//删除sequence
drop sequence auto_id //删除后不能引用
使用触发器生成唯一主键
-- 使用触发器实现ID递增
-- 创建序列
CREATE SEQUENCE auto;
-- persons_tri 触发器名字
-- person 表名
-- AUTO.nextval AUTO表示刚刚创建的序列
-- personid 表示自增的字段
//注意要使用分号,否则会编译失败
CREATE OR REPLACE TRIGGER persons_tri
BEFORE INSERT ON person
FOR EACH ROW
DECLARE
BEGIN
SELECT AUTO.nextval
INTO :NEW.personid
FROM dual;
END;
然后在执行插入操作的时候就可以不指定主键了
//删除触发器
drop trigger persons_tri
触发器
修改表
- 增加列
alter table student add address varchar(20) not null
- 删除列
alter table student drop column address
- 修改列名
alter table student rename column id to sid
- 修改列类型
alter table student modify name varchar(10)
修改用户
- 修改密码
alter user scott identified by '123'
- 修改锁定/解锁状态
alter user scott account unlock | lock
- 删除用户
//删除用户
drop user test;
//如果用户有自己的数据(比如创建了表对象)
drop user test cascade
Oracle本身就有工具
- database configuration assistant
创建、配置、删除、管理数据库 - net configuration assistant
- sqlplus
conn username/pwd as {sysdba | sysoper | normal} @服务器字符串
,服务器字符串在安装目的NETWORK\ADMIN\tnsnames.ora
中配置,
image.png ,可以通过net configuration assistant工具来配置
客户端连接工具,连接后命令要以分号结尾
默认账户
Oracle安装后sys和system是已有的账户,且没有锁定,是管理员账户。scott账户是给用户学习用的,是锁定的,默认密码是tiger,可以用sys账户登录后解锁scott账户并修改scott账户的密码
关键字
我们一般在命名的时候不要使用Oracle中的关键字,否则会出现一些奇怪的错误,其实代码没错,就是因为使用了关键字导致的
查询表空间文件位置
select file_name from dba_data_files
网友评论