oracle笔记1-基本用户、权限、表操作

打开cmd

sqlplus

如果暂时不登录

sqlplus /nolog

完整连接方式:

conn username/password@连接字符串 as 身份

例:(连接远程服务器)
IP,端口,服务名,用户名和密码

conn system/[email protected]:1521/orcl 

查找数据文件:

select name from v$datafile;

查找控制文件:

select name from v$controlfile;

查找日志文件:

select group# from v$logfile;

表空间(查询表结构):

`desc v$tablespace`

数据库的名字

desc v$database

查找数据库的名字

 select name from v$database;

查找数据库有多少表空间:

select name from v$tablespace;

如果需要保留写过的命令

spool d:/oracle724.txt

写完之后

spool off

查看用户

desc dba_users
select username from dba_users

新建表空间

create tablespace shoppingtp datafile 'D:/shoppingtp01.dbf'size 10M autoextend on next 10M maxsize 1G;

修改表空间(新增)

alter tablespace shoppingtp add datafile 'D:/shoppingtp02.dbf' size 10M autoextend on next 10M maxsize 1G;

查看文件

desc dba_data_files

查询信息(查询一定要用大写,因为写进去就改成大写)

select file_name,tablespace_name,bytes,blocks from dba_data_files where tablespace_name='SHOPPINGTP'

删除表空间

drop tablespace DEMOSPACE including contents and datafiles

系统数据字典 DBA_TABLESPACES 中记录了关于表空间的详细信息:

select * from sys.dba_tablespaces;

新增用户

create user test_user identified by abc default tablespace tptest;

删除用户

drop user zyt cascade

更改用户密码(高权限下)

alter user zyt(用户名) identitfied by abc123(密码)

修改当前用户密码

password

解锁下一级用户

alter user 用户名 account lock/unlock;

【edit】->【/】编辑命令,执行缓存命令


授予权限:
创建回话权限(即可以登录)

grant create session to test_user

赋予建表权限,但是没有插入数据权限

grant create table to test_user

【Connect】-登陆执行基本函数【Resource】-建立用户自己的数据对象 【DBA】-总经理

grant connect,resource to test_user

收回权限

revoke 权限 from 用户

对象权限(不同于对象权限),9种对象权限

grant select on t4 to test_user;

给另一个用户赋予对象权限

conn test_user/abc

登陆另一个用户

select * from test_user2.t4

需要带上表的拥有者才能使用对象权限

with grant option

对象权限传递

【概要文件:赋予用户来限制用户的操作】
查看限制

show parameter resource_limit;

设置限制

alter system set resource_limit=TRUE;

新建文件编辑概要文件

create profile pro_test limit

概要文件内容(举例)

sessions_per_user 3  //限制会话数3,即开启多个cmd登陆
	connect_time 3 //连接时间3分钟
	failed_login_attempts 2 //密码输错2次以上账户即锁
	;

设置对应用户

alter user test_user default tablespace tptest
	profile pro_test
	;

查看用户和对应概要文件

select username,profile from dba_users;

create table shopping_user.t_user3(
  2    uiid char(6) primary key,--用户ID
  3    uname varchar2(20) not null
  4  )
  5  TABLESPACE USERS;

查看T_USER表的所有者,表空间

select owner,table_name,tablespace_name from all_tables where table_name='T_USER'

【解决数据文件丢失的方法:】
登录sys用户

conn /as sysdba
shutdown immediate

提示"数据库未打开",说明第三步不成功(数据库启动和关闭——三步nomount->mount->open)

startup mount

装载完毕->第二步mount,装载控制文件

alter database open;

问题暴露出来:没有数据文件
有备份,还原即可
没有备份,数据文件确实丢掉了,则删除丢掉文件的物理信息,弃车保帅

alter database datafile 'd:/tptest01.dbf' offline drop

alter database open 显示"数据库已更改"

测试数据库最好的状态就是建表

create table t4(f1 char(8));

【pctfree默认是10,主要看更新的数据有多大,可以查看表的max_row_len如果很大又频繁更新可以考虑增加该值。
pctused主要看删除数据的大小,如果很大可以调大该值,如果不是很频繁可以设置小一些30-40
pctused+pctfree<90】

—pctfree:考虑update,比如用户信息表,地址update频率比较高,地址varchar(50)占用用户总信息(110)约50%,假设一半用户刚开始都不设地址,后期update地址,那么pctfree大概为50%*50%=25%,所以考虑设置25

—pctused:考虑delete,如用户信息表一般不做删除,则无需设置pctused,(oracle默认值40,一般都是合适的);如商品信息表,删除操作比较频繁则有必要调整pctused。
假设数据块为200M,此时pctused需要设置高一点,比如60%,则低于120M时可插入数据,此时空余空间80M,(如果设置20%,则需要空余160M空间才能插入,浪费空间);

假设数据块为2M,此时pctused需要设置低一点,比如20%,则低于0.4M时可插入数据,此时空余空间1.2M,(如果设置60%,则空余0.8M空间就能插入,插入数据少,效率低);

-----一条用户信息是连续存储的,会有空余空间给予修改,当修改量超过pctfree时,需要进行行迁移,迁移到另一个数据块,同时指针指向该条数据;数据库大小是NEXT值


分区表:选择分区之后,不会扫描别的区间数据,搜索速度就会很快(经典数据分区案例:淘宝筛选区)

范围分区:range,价格分区,日起分区,金额分区;(PPT例子)
散列分区:list,可以进行枚举的,评价(好中差评),发货地分区(广州深圳浙江。。。),


【alter table t1 drop colum f5;】删除列

【alter table t1 modify f2 varchar2(10);】修改列

【alter table employees
add job_count number(2) check(job_count>=0);】新增列

修改列和修改表名字会使列和表的意义改变,建议重建

【drop table t1;】删除表,不可逆

【delete from t1】delete操作在少量数据速度可行,可撤销数据;但是大量数据时候速度慢,且无法马上清空空间
【rollback;】

【truncate table t1】表被截断,速度快,清空空间

delete:删除数据,可以撤销,可以带条件;效率低,不会及时释放空间
truncate:清除所有数据,保留表结构,效率高,释放空间,不可撤销
drop:删除表和数据结构,不可撤销

【create table emp as select * from employees 】另存一个表,相当于备份
【create table emp as select * from employees where 1=2;】只要结构,不要数据

第一种插入写法:

insert into emp 
values(23,'yq','lee','[email protected]','18819259360',to_date('2017-7-26','yyyy-mm-dd'),'FI_MGR',2000,0.1,null,60);

日期型数据,如果不做变化需要和oracle相同模式;加上to_date可以强制转换,参照老师给的资料《函数大全》

第二种插入写法:指定列添加数据,其他列为空

insert into emp(employee_id,last_name,email,hire_date,job_id)
	values(5,'mary','mary@qq,com',sysdate,'hjh')
	;

批量添加:
【desc emp】【desc employees】表结构一样

第一种:
【insert into emp select * from employees where department_id=60;】
【insert into emp select * from employees】

第二种:
【insert into emp
select employee_id,null,last_name,email,null,hire_date,‘job’,salary ,0.1,null,null from employees;

第三种:

【insert into emp (employee_id,last_name,email,null,hire_date,salary,job_id)
select employees_id,last_name,email,null,hire_date,salary,job_id from employees;】

括号里是emp表列名,对应employees表的列顺序

你可能感兴趣的:(oracle,数据库,数据库)