oracle基础
sql 全称 Structure Query Language 是数据库的核心语言 包括以下三大类
数据操作语言 dml
数据定义语言 ddl
数据控制语言 dcl
select name from v$database 查看数据库实例名
select * from Dba_Tablespaces; 查看数据库中的所有表空间
select * from all_users 查看数据库中所有的用户
select * from dba_users 查看数据库中所有的dba用户
select * from session_privs 查看当前用户的权限
select * from user_all_tables 查询当前用户所有的表 SELECT * FROM USER_TABLES;
select * from user_tables
select * from user_views 查询当前用户视图
select * from user_source 查询当前用户所有函数和存储过程
grant all_privilege to smptest 给用户赋权
grant sysdba to username 给用户赋予dba权限
select username,default_tablespace from dba_users where username='DOCUXU';查询指定用户的表空间
进入sql前
set oracle_sid=adamdb
或者sqlplus/nolog
conn username password@数据库名称
查询数据库中表 select table_name from user_names
alter table 表名 add(column_name type) 添加一个字段
alter table 表名 modify(column_name type) 修改字段或长度
alter table 表名 rname column (column_name)旧 to (column_name)新 更改列名
alter table 表名 drop column column_name 删除字段
rename (table_name)旧 to (table_name)新 修改表名称
drop table table_name 删除表的数据和结构
delete from table_name 删除表的全部记录 表结构还在 日志也在
truncate table table_name 删除标的全部记录 表结构还在 没有日志 速度较快
查询系统时间
select sysdate from dual
更改系统时间格式
alter session set nls_date_format='dd-mm-yy'
1、查询oracle的连接数
select count(*) from v$session;
2、查询oracle的并发连接数
select count(*) from v$session where status='ACTIVE';
3、查看不同用户的连接数
select username,count(username) from v$session where username is not null group by username;
4、查看所有用户:
select * from all_users;
5、查看用户或角色系统权限(直接赋值给用户或角色的系统权限):
select * from dba_sys_privs;
select * from user_sys_privs;
6、查看角色(只能查看登陆用户拥有的角色)所包含的权限
select * from role_sys_privs;
7、查看用户对象权限:
select * from dba_tab_privs;
select * from all_tab_privs;
select * from user_tab_privs;
8、查看所有角色:
select * from dba_roles;
9、查看用户或角色所拥有的角色:
select * from dba_role_privs;
select * from user_role_privs;
10、查看哪些用户有sysdba或sysoper系统权限(查询时需要相应权限)
select * from V$PWFILE_USERS;
修改数据库允许的最大连接数:
alter system set processes = 300 scope = spfile;
查看游标数量
Select * from v$open_cursor Where user_name=''
查询数据库允许的最大连接数:
select value from v$parameter where name = 'processes';
或者:show parameter processes;
查询数据库允许的最大游标数:
select value from v$parameter where name = 'open_cursors'
查看oracle版本
select banner from sys.v_$version;
按降序显示用户"SYSTEM"为每个会话打开的游标数
select o.sid, osuser, machine, count(*) num_curs from v$open_cursor o, v$session s where user_name = 'SYSTEM' and o.sid=s.sid group by o.sid, osuser, machine order by num_curs desc;
Oracle建立表空间用户以及dmp文件导入导出
select name from v$database 查询数据库实例名
select * from Dba_Tablespaces 查看表空间
grant all privilege to smptest 给用户赋权
grant sysdba to username给用户赋予dba权限
select * from user_tables 查看当前用户能够访问的表
select * from user_all_tables Oracle查询用户表
select * from user_views Oralce查询用户视图
select * from user_source 查询所有函数和存储过程
select * from all_users 查询所有用户
select * from dba_users 查询所有dba用户
select * from session_privs 查看当前用户权限
select name from v$database
建立表空间以及对应的用户名和密码
create tablespace adam datafile'H:\app\Administrator\adam.ora' size 5000m
create user smptest identified by 123default tablespace adam quota 1000m on users
数据导出:
1 将数据库TEST完全导出,用户名system密码manager 导出到D:\daochu.dmp中
exp system/manager@TEST file=d:\daochu.dmp full=y
2 将数据库中system用户与sys用户的表导出
exp system/manager@TEST file=d:\daochu.dmp owner=(system,sys)
3 将数据库中的表inner_notify、notify_staff_relat导出
exp aichannel/aichannel@TESTDB2 file= d:\data\newsmgnt.dmp tables=
(inner_notify,notify_staff_relat)
1 将D:\daochu.dmp中的数据导入 TEST数据库中。
imp system/manager@TEST file=d:\daochu.dmp
imp aichannel/aichannel@HUST full=y file=file= d:\data\newsmgnt.dmp
ignore=y
上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导
入。
在后面加上 ignore=y就可以了。
2 将d:\daochu.dmp中的表table1导入
imp system/manager@TEST file=d:\daochu.dmp tables=(table1)
orcle主键自增长实例 以及密码丢失问题
Oracle序列详解和创建自增主键
Oracle序列主键============================================
序列:是oracle提供的用于生产一系列唯一数字的数据库对象
自动提供唯一的数值
共享对象
主要用于提供主键值
将序列值装入内存可以提高访问效率
语法===========================
increment by 用于定义序列的不长 如果省略 则默认为1
start with 定义序列的初始值(即产生的第一个值),默认为1
maxvalue 最大值 nomaxvalue默认选项 没有最大值
minvalue 最小值 nominvalue默认选项
递增oracle 最大值 10的27次方
递减序列 最小值1
cycle 和nocycle
cache(缓冲)
删除Oracle序列的语法是drop sequence 序列名;===========================
建表语句=============================================
create table car(
id number(10) not null,
speed varchar2(32),
price varchar2(32),
des varchar2(32),
constraint pk_id primary key(id)
)
建立序列
create sequence seq_car_id
start with 1
increment by 1
minvalue 1
maxvalue 99999999
nocycle
nocache
order;
建立触发器
CREATE OR REPLACE TRIGGER trg_car_id
BEFORE INSERT ON car
FOR EACH ROW
BEGIN
SELECT seq_car_id.nextval INTO :new.id FROM dual;
END;
一、忘记除SYS、SYSTEM用户之外的用户的登录密码。
用sys或system用户登录,执行修改数据库密码
#sqlplus sys/oracle@"sid" as sysdba
使用如下语句修改用户的密码:
SQL> alter user "username" identified by "newpass";
注意:密码不能全是数字。并且不能是数字开头。否则会出现:ORA-00988:口令缺失或无效
二、忘记SYS用户,或者是SYSTEM用户的密码。
如果是忘记system/sys密码,且人就在数据库服务器旁边,可以可以通过本地验证方式登录,执行如下操作:
$ sqlplus / as sysdba
SQL> alter user "username" identified by "newpass";
用数据字典
select * from dba_users; 查看数据库里面所有用户,前提是你是有dba权限的帐号,如sys,system
select * from all_users; 查看你能管理的所有用户!
select * from user_users; 查看当前用户信息 !
查询当前用户所有表
方法一:select * from tab;
方法二:select * from user_tables;
select username,default_tablespace from dba_users where username='用户名';
查看结果(如查询scott用户的所属表空间):
搜索
select username,default_tablespace from dba_users where username='SCOTT';--用户名需要大写