DB

orcacle delete lock
SELECT s.sid, s.serial# FROM v$locked_object lo, dba_objects ao, v$session s WHERE ao.object_id = lo.object_id AND lo.session_id = s.sid;

ALTER system KILL session 'SID,serial#';
============================================================================================
Oracle
监听:lsnrctl:start/stop/status/exit
实例:sqlplus / as sysdba
           sqlplus /nolog
           connect/startup/shutdown
连接:rlwrap sqlplus dv30_dec30_ms/[email protected]:1521/orcl
连接远程数据库:
sqlplus live_co/[email protected]/toaous1q
set timing on
set linesize 200
set autotrace traceonly
sqlplus /nolog
SQL>connect username/password@ip:port/service_name
查询计划:
explain plan for {SQL statement}
select * from table(dbms_xplan.display());
select * from plan_table;




============================================================================================
sql语句分类:
DDL:CREATE, ALTER, DROP, TRUNCATE, COMMENT, RENAME
DML:SELECT, INSERT, UPDATE, DELETE CALL, EXPLAIN PLAN, LOCK TABLE
DCL:GRANT, REVOKE
TCL:COMMIT, SAVEPOINT, ROLLBACK, SET TRANSACTION
DDL和DCL默认且只能是每条语句自提交的,如果想让DML也是每条语句自动提交
SET AUTOCOMMIT ON
DML的事务SQL组成:以第一个DML语句的执行作为开始,以commit/rollback/用户会话正常结束(自动提交)/系统异常终止 (自动回滚)/系统崩溃 (自动回滚)中的其中之一结束。

============================================================================================
索引:
理论不可能同时将两列按顺序进行排序,所以在数据之外,还维护着特定算法的数据结构,它们通过某种方式引用着数据,而这种数据结构便是索引
============================================================================================
事务:
事务的ACID四特性:
原子性,一致性,隔离性(用于并发事务),持久性
数据库的两种锁:排它锁(不能同时读取不能同时修改),共享锁(能同时读取不能同时修改),各种隔离级别j并发事务控制就是通过锁实现的。
事务隔离级别:
未提交读(解决更新丢失,会出现脏读),
已提交读(解决脏读,会出现不可重复读),
可重复读(解决了不可重复读,会出现幻读)
串行化

Oracle 查询某个表的主键被哪些表引用
select distinct b.table_name,b.column_name from all_constraints a
inner join all_cons_columns b
on a.constraint_name = b.constraint_name
where a.r_constraint_name in (
'PK_P_PRD_HFPRICE'
) ;
select * from all_TABLES where table_name = 'PK_P_PRD_HFPRICE';
select * from all_constraints e where e.table_name='P_PRD_HFPRICE' and owner = 'LIVE2_KS';
============================================================================================
mysql修改密码:set password for root@localhost=password('root');
============================================================================================
mysql Access denied for user 'root'@'localhost' (using password: YES)
预备知识:root@localhost和[email protected]是不同的,在mysql.user表中有不同的记录即有不同的权限和密码。
如果mysql -uroot -p123连接的host是localhost,可以指定host,如mysql -uroot -p123 -h127.0.0.1
修改某个用户,某个host的密码: 在mysql控制台下执行: SET  PASSWORD  FOR root @ localhost =  PASSWORD('123')
也可以执行mysqld  --skip-grant-tables启无需密码的 mysql服务,再在mysql.user里进行相行权限密码设置。

mysql表名不区分大小写设置:在my.cnf的[mysqld]添加lower_case_table_names=1
============================================================================================
Oracle名词解释及关系
1.数据库名:数据库的标识   select name from v$database;
2.数据库域名:用于分布式环境  select value from v$parameter where name = 'db_domain';
3.全局数据库名=数据库名.数据库域名
4.数据库实例名: oracle数据库参数, 由一片内存System Global Area(SGA)和多个进程组成     select instance_name from v$instance; or select value,name from v$parameter where name = 'instance_name';
5.数据库服务名: oracle数据库参数    select name,value from v$parameter where name = 'service_names';
6.oracle SID : 操作系统的环境变量
一般情况:数据库名,实例名,服务名(service_name),SID都是一样的value.

7.表空间:是一个逻辑概念,由一组data files组成的一个表空间  select file_name,tablespace_name from dba_data_files;
一个数据库可以由多个表空间构成  select * from v$tablespace;
一个表空间由多个段(Segment)组成, Segment表示数据对象的别称,如段包含(表段,索引段,临时段...)select * from dictionary;
一个段由多个区间(Extend)组成
一个区间由一组逻辑上连续的数据块(data block)组成

8.表空间,表,用户的关系
创建用户时指定表空间,一个表空间下,可以有多个用户指向同一个表,但不同的用户针对同一个表的内容不相同。select * from all_tables;
9.用户和模式:
SYS用户,缺省始终创建,且未被锁定,拥有数据字典和可以访问数据库内的所有对象
SYSTEM用户,缺省始终创建,且未被锁定,可以访问数据库内的所有对象
10.数据字典:分为静态和动态
静态字典有三类:
user_% 当前用户拥有的所有对象信息 ;
all_% 当前用户不仅自己拥有的对象信息外,还有当前用户权限可以访问到的其它schema的对象信息;
dba_% 所有schema下的,所有对象信息
user_users|user_tables|user_objects |user_dependencies|user_updatable_columns(一般用于查看视图哪些列可以添加,更新,删除操作)
动态字典一般以v$打头的视图:v$session | v$parameter | v$instance | select * from dba_objects where object_name like 'V$%';

11.模式(schema):某个用户拥有的对象的集合。用户名和schema是一一对应的,并且用户名和schema名字相同, schema不能创建,只会伴随着创建用户时创建与用户名相同的schema。在当前用户登录下创建的对象,默认属于当前用户对应的模式下的对象。

user是有权限控制的受限的访问容器,schema是一个容器,当前用户如果要想访问某个容器的表,必须在表前面加上schema名字,或者改变当前schema: alter session set current_schema=schema_name(  session级别修改参数current_schema )
如何查看当前的schema: select SYS_CONTEXT('USERENV','CURRENT_SCHEMA') current_schema from dual;
如何查看当前的用户:show user;
一个schema可以在多个表空间中,一个表空间可以存多个schema。
oracle权限(用户所拥有的权限):
系统权限:所有系统权限在SYSTEM_PRIVILEGE_MAP表中,常用的权限有--create session; create user; create table;create view; create procedure; 
 给用户分配系统权限: GRANT privilege [, privilege...] TO user [, user| role, PUBLIC...]  [WITH ADMIN OPTION];
public--所有用户
WITH ADMIN OPTION-- 使用户同样具有分配权限的权利,可将此权限授予别人
SQL> GRANT CREATE SESSION,CREATE TABLE,CREATE USER TO scott;
查看用户的系统权限:
dba_sys_privs  --针对所有用户被授予的系统权限  user_sys_privs --针对当前登陆用户被授予的系统权限

对象权限:所有的对象有表、视图、序列、存储过程,所有对象的操作有 修改(alter) ;删除(delete) ;执行(execute); 索引(index);插入(insert); 关联(references); 选择(select) ;更新(update) 
给用户分配操作对象的权限:
GRANT object_priv|ALL [(columns)] ON object TO {user|role|PUBLIC}  [WITH GRANT OPTION];
ALL:所有对象权限
PUBLIC:授给所有的用户
WITH GRANT OPTION:允许用户再次给其它用户授权
 SQL> GRANT UPDATE(sal,mgr) ON scott.emp TO john;--分配 给john可以更新soctt下的对象emp的sal和mgr列
查看用户权限:
    ROLE_SYS_PRIVS            角色拥有的系统权限
    ROLE_TAB_PRIVS            角色拥有的对象权限
    USER_TAB_PRIVS_MADE      查询授出去的对象权限(通常是属主自己查)
    USER_TAB_PRIVS_RECD      用户拥有的对象权限
    USER_COL_PRIVS_MADE      用户分配出去的列的对象权限
    USER_COL_PRIVS_RECD      用户拥有的关于列的对象权限
    USER_SYS_PRIVS            用户拥有的系统权限
    USER_TAB_PRIVS            用户拥有的对象权限
    USER_ROLE_PRIVS       用户拥有的角色  

====================================================================================================

 
oracle10 hint -- optimizer_features_enable('oracle version num') 使用哪版本的 查询 优化功能


============================================================================================
oracle explain
  1. table access (full)
  2. index (unique scan) ; table access(by index rowid)
  3. index (range scan); table access(by index rowid batched)
  4. index (fast full scan); sort (aggregate) example:select count(0) from o_order;
  5. index (full scan)
  6. has join
  1. 只能用在CBO优化器中

  1. nest loops
  1. 可以看作2层循环,外层(外部表或驱动表)一般为小表,经验值是驱动表为小表,总IO次数少。
  2. 原理: table1的row 1 --probe --> table2; table1的row2 --probe -->table2........
  3. nested loops(table access full DEPT | table access full EMP)
  4. 遍历操作,所以优点是可以部分返回结果,不必整体遍历完再返回
  1. sort merge join
  1.  merge join( (sort join (table access full table1) )|( sort join (table access full table2)))
  2. 排序极费资源,如果join的两个字段都有索引,或没有索引但已排好序,可以考虑使用merge join.
  1. 笛卡尔积

名词:
predicate(谓词):where里的限制条件
可选择性(selectivity):某一列的distinct的数量/总行数量,此值越接近1,则越适合做索引
经验:
较大的表建议使用全表扫描,除非返回的数据记录比较多,一般超过总量的5%-10%
rowid指出了该行数据所在的数据文件,数据块,以及行在该块所在的位置。所以rowid是获取单行数据的最快方法。
排序是极其费资源的操作,尤其对于大表。
所有的瓶颈都是IO问题,所以优化目标是使IO次数最少。


============================================================================================
时间戳timestamp:这个概念在所有语言里的实现都是一样的,即 (1970-1-1 00:00:00 +0:00)到当前0时区时间的差值。
本地时间,在某个snapshot上,东8区人的本地时间为 (2017-10-1 02:10:00 +8:00),那么东9区的时间为 (2017-10-1 03:10:00 +9:00)

SELECT TO_TIMESTAMP ('10-Sep-02 14:10:10.123000', 'DD-Mon-RR HH24:MI:SS.FF') FROM DUAL;
SELECT FROM_TZ(TIMESTAMP '2007-11-20 08:00:00', '3:00') FROM DUAL;
select * from V$TIMEZONE_NAMES where tzabbrev like '%GMT%';
select localtimestamp from dual;
select dbtimezone from dual;
select sessiontimezone from dual;
SELECT SYSTIMESTAMP FROM DUAL;
select sysdate from dual;
UTC=Universal Time Coordinated 通用协调时间
GMT=Greenwich Mean Time 格林尼治平均时 UTC=GMT
PST=Pacific Standard Time 太平洋标准时间,UTC-0800
EST=Eastern Standard Time 东部标准时间,UTC-0500
EDT=Eastern Daylight Time 东部夏令时(或)东部日光时间,UTC-0400
UTC + 时区差(东正西负) = 本地时间
============================================================================================
where和on(left or righ join)的区别:
先执行on,再执行where
on的执行有三步:
先left join,两个表中都存在的数据先内部笛卡尔一下
然后如果on表件里有其它条件对以上的结果集再过滤,例如 lefttabel.name='aaa' 或者 righttable.name='ccc'
最后步是将左表中存在的,而右表中不存在的都为null的记录追加到最后。

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

============================================================================================

猜你喜欢

转载自blog.csdn.net/venlv2046/article/details/80274963
DB