每天一点点oracle

Posted 90500042陈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天一点点oracle相关的知识,希望对你有一定的参考价值。

每天一点点oracle

sqlplus / as sysdba

[oracle@oracle ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Sun Sep 23 19:52:26 2018

Copyright (c) 1982, 2011, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> exit

显示当前用户名

SQL> show user

USER is "SYS"

 

oralce的一些工具

工具位置:

[oracle@oracle bin]$ pwd

/u01/app/oracle/product/11.2.0.3/db_1/bin

[oracle@oracle ~]$ cat .bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

    . ~/.bashrc

fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH

HISTTIMEFORMAT=\'[%F %T]\'

ORACLE_BASE=/u01/app //oracle安装目录

ORACLE_SID=orcl //数据库实例名

ORACLE_HOME=$ORACLE_BASE/oracle/product/11.2.0.3/db_1 //oracle家目录

NLS_LANG=AMERICAN_CHINA.ZHS16GBK

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib

PATH=$ORACLE_HOME/bin:$PATH

export ORACLE_BASE ORACLE_HOME ORACLE_SID NLS_LANG PATH

[oracle@oracle ~]$ orabase

/u01/app

 

Usage: oerr facility error

Facility is identified by the prefix string in the error message.

For example, if you get ORA-7300, "ora" is the facility and "7300"

is the error. So you should type "oerr ora 7300".

If you get LCD-111, type "oerr lcd 111", and so on.

[oracle@oracle bin]$ oerr ora 7300 查看一定的报错信息

 

sqlplus文件的位置

[oracle@oracle admin]$ pwd

/u01/app/oracle/product/11.2.0.3/db_1/sqlplus/admin

 

#查看当前数据库名

SQL> select name from v$database;

NAME

------------------

ORCL

SQL> show parameter db;

 

 

#查看当前数据库实例名

SQL> select instance_name from v$instance;

 

INSTANCE_NAME

--------------------------------

orcl

 

SQL> show parameter instance;

 

 

#查询当前数据名

 

 

 

 

 

 

 

oracle体系结构

 

 

 

oracle错误日志的记录位置

[oracle@oracle trace]$ pwd

/u01/app/diag/rdbms/orcl/orcl/trace

 

 

SQL> show parameter db_cache_size;

 

NAME                 TYPE

------------------------------------ ----------------------

VALUE

------------------------------

db_cache_size             big integer

0

SQL> show sga

 

Total System Global Area 776646656 bytes

Fixed Size         2232392 bytes

Variable Size         583012280 bytes

Database Buffers     188743680 bytes    数据缓冲区

Redo Buffers         2658304 bytes 重做日志缓冲区

 

SQL> select username from dba_users;

 

创建用户

SQL> create user nod identified by nod;

 

User created.

 

下班的时候提醒领导拿走螃蟹 在冰箱

 

显示哪些后台进程

SQL> select * from v$BGPROCESS;

SQL> select name from v$BGPROCESS;

PADDR         PSERIAL# NAME

---------------- ---------- ----------

DESCRIPTION

--------------------------------------------------------------------------------

ERROR

----------

000000008DC86A58     1 PMON

process cleanup

 

LGWR 日志写入进程

redo log buffer àredo log file

database buffer cache àdata file

 

LGWR 1/3 或者多余1M 每隔3s 执行commit

DBWR

先写日志 后写数据

oracle总是先记录变化,再修改数据缓存

 

DBWR 脏缓冲区个数达到指定阈值 checkpoint

CKPT

 

在oracle当中 / 斜杠表示重复执行上一条语句

SQL> select current_scn from v$database;

SQL> /

 

CURRENT_SCN

-----------

3297183

 

SMON 系统监控进程 system monitor

PMON 进程监控进程

ARCn 归档进程

 

数据库四种形态

关闭     shutdown

非装载     nomount启动

装载         mount

打开         open

 

 

SQL> select status from v$instance;

STATUS

------------------------

OPEN

 

 

关闭数据库

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> connect scott/tiger

ERROR:

ORA-01034: ORACLE not available

ORA-27101: shared memory realm does not exist

Linux-x86_64 Error: 2: No such file or directory

Process ID: 0

Session ID: 0 Serial number: 0

 

 

Warning: You are no longer connected to ORACLE.

SQL> startup nomount;

ORA-01031: insufficient privileges

SQL> connect / as sysdba

Connected to an idle instance.

SQL> startup nomount

ORACLE instance started.

 

Total System Global Area 776646656 bytes

Fixed Size         2232392 bytes

Variable Size         583012280 bytes

Database Buffers     188743680 bytes

Redo Buffers         2658304 bytes

SQL> select status from v$instance;

 

STATUS

------------------------

STARTED

 

SQL> alter database mount;

 

Database altered.

 

SQL> select status from v$instance;

 

STATUS

------------------------

MOUNTED

 

SQL> alter database open;

 

Database altered.

 

SQL> select status from v$instance;

 

STATUS

------------------------

OPEN

 

[oracle@oracle ~]$ sqlplus / as sysdba

 

SQL*Plus: Release 11.2.0.3.0 Production on Mon Sep 24 15:18:19 2018

 

Copyright (c) 1982, 2011, Oracle. All rights reserved.

 

Connected to an idle instance.

instance表示数据库实例处于关闭状态

 

 

SQL> conn scott/tiger

ERROR:

ORA-28000: the account is locked

Warning: You are no longer connected to ORACLE.

这个账户被锁定了

处理方法 修改用户密码

SQL> conn / as sysdba

Connected.

SQL> alter user scott account unlock identified by oracle;

User altered.

SQL> conn scott/oracle

Connected.

 

查看当前用户下有几张表

SQL> select * from tab;

 

 

参数文件:

参数文件中的参数值: 非默认值的参数

默认值查看方法通过官当文档进行查

静态initsid.ora

动态spfilesid.ora

 

SQL> show parameter name

 

[oracle@oracle dbs]$ ls

hc_orcl.dat init.ora lkORCL orapworcl spfileorcl.ora

[oracle@oracle dbs]$ pwd

/u01/app/oracle/product/11.2.0.3/db_1/dbs

 

spfileorcl.ora

就是关于orcl这个实例的动态初始化参数文件

 

SQL> show parameter spfile

 

NAME                 TYPE VALUE

------------------------------

spfile                 string /u01/app/oracle/product/11.2.0.3/db_1/dbs/spfileorcl.ora

 

通过动态初始化参数文件创建静态初始化参数文件

SQL> create pfile from spfile;

File created.

[oracle@oracle dbs]$ ls

hc_orcl.dat init.ora initorcl.ora lkORCL orapworcl spfileorcl.ora

 

SQL> select * from v$log;

 

 

进行修改

SQL> alter system switch logfile;

System altered.

#查看当前日志

SQL> select * from v$log;

current表示当前

sequence是一直在累加的

 

警告日志路径

[oracle@oracle trace]$ pwd

/u01/app/diag/rdbms/orcl/orcl/trace

[oracle@oracle trace]$ tail -200f alert_orcl.log

#查看有没有开归档

SQL> select log_mode from v$database;

 

LOG_MODE

------------------------

NOARCHIVELOG 没有开

归档可以做备份和恢复

如果数据库是归档模式,可以在数据库open状态下进行备份,热备份

 

 

[oracle@oracle trace]$ tail -200f alert_orcl.log

 

 

#创建表语句

SQL> create table t1 as select * from dba_objects;

Table created.

SQL> select count(*) from dba_objects;

COUNT(*)

----------

75584

SQL> select count(*) from t1;

COUNT(*)

----------

75584

 

SQL> show parameter pfile

NAME                 TYPE         VALUE

------------------------------------ ---------------------- ------------------------------

spfile                 string         /u01/app/oracle/product/11.2.0

                             .3/db_1/dbs/spfileorcl.ora

 

 

查看监听状态

[oracle@oracle ~]$ lsnrctl stauts

 

 

 

 

 

SQL> show user

USER is "SCOTT"

SQL> select * from tab;

 

TNAME                             TABTYPE     CLUSTERID

------------------------------------------------------------ -----------

BONUS                             TABLE

DEPT                             TABLE

EMP                             TABLE

SALGRADE                         TABLE

这段话表示 scott下可以看到四张表

 

 

 

 

scott用户

 

 

 

 

解决ora-01031insufficient privileges错误

解决system用户不能登录的问题

alter user system account unlock identified by orcl;

grant sysdba to system;

 

 

 

 

#查询用户默认表空间

SQL> select username,default_tablespace from dba_users where username=\'SCOTT\';

 

 

 

Oracle备份恢复

 

1 系统最新SCN

SQL> select current_scn from v$database;

 

CURRENT_SCN

-----------

3428264

SQL> /

 

CURRENT_SCN

-----------

3428308

 

SQL> /

 

CURRENT_SCN

-----------

3428309

 

经过检查发现SCN号是一直在变化的

 

 

 

SQL> select checkpoint_change# from v$database;

 

CHECKPOINT_CHANGE#

------------------

     3419021

 

 

 

 

斜杠的作用就是类似分号

进行2个语句的分割

 

 

 

 

--根据结果集创建表 表结构+表数据

create table information_schema as select * from tab;

 

--创建表只包含表结构,不包含数据

create table information_schema_new as select * from tab where 1=2;

 

select sysdate,to_char(sysdate,\'yyyy-mm-dd hh24:mi:ss\') from dual

 

select to_char(current_timestamp(5),\'YYYY-MM-DD HH24:MI:SSxFF\') as 当前时间 from dual;

 

--TRUNCATE 将表中数据一次性全部删除

 

truncate table information_schema;

 

TRUNCATE 和 DELETE 都能把表中的数据全部删除

他们的区别是:

1. TRUNCATE 是 DDL 命令,删除的数据不能恢复; DELETE 命令是 DML 命令,

的数据可以通过日志文件恢复。

2. 如果一个表中数据记录很多, TRUNCATE 相对 DELETE 速度快

由于 TRUNCATE 命令比较危险,因此在实际开发中, TRUNCATE 命令慎用。

 

 

 

逻辑运算符三个 AND OR NOT

 

--查询中的算术运算

 

select ename,sal,(sal*12+2000) from emp where sal>2000;

 

-- 字符串的连接工作

 

 

 

select (ename ||\' is a \'|| job) as "job detail" from emp where sal>2000;

字符串连接

 

 

NUll操作

如果某条记录中有缺少的数据值,就是空值(NULL值)。空值不等于0或者空格,空值是指未赋值、未知或不可用的值。任何数据类型的列都可以包括NULL 值,除非该列被定义为非空或者主键

 

select ename ,comm from emp where sal<2000 and comm is null;

 

 

select ename ,comm from emp where sal<2000 and comm is not null

 

Betweenand操作

between操作指定的范围也包含边界

 

select ename,sal from emp where sal between 1000 and 2000;

select ename,sal from emp where sal>=1000 and sal<=2000;

 

 

使用desc

 

 

使用内连接处理问题

 

--请查询出工资大于 2000 元的,员工姓名,部门,工作,工资。

内连接方式1

select a.ename,a.job,a.sal,b.dname from emp a,dept b where sal>2000 and a.deptno=b.deptno

 

内连接方式2

select a.ename,a.job,a.sal,b.dname from emp a inner join dept b on a.deptno=b.deptno where a.sal>2000

 

 

子查询

子查询在 SELECT、 UPDATE、 DELETE 语句内部可以出现 SELECT 语句。内部的 SELECT 语

句结果可以作为外部语句中条件子句的一部分,也可以作为外部查询的临时表。子查询的类

型有:

1. 单行子查询:不向外部返回结果,或者只返回一行结果。

2. 多行子查询:向外部返回零行、一行或者多行结果。

 

--请查询出每个部门下的员工姓名,工资

 

select ename,job,sal,deptno from emp where deptno in (select deptno from dept where dname=\'SALES\')

 

select ename,job,sal,deptno from emp where deptno=(select deptno from dept where dname=\'SALES\')

 

 

 

在Oracle当中 不区分列名的大小写

 

 

Any Any放在比较运算符后面 表示任意的意思

 

 

--查询出 Emp 表中比任意一个销售员("SALESMAN" )工资低的员工姓名、工作、工资

 

select ename,job,sal from emp where sal<any (select sal from emp where job=\'SALESMAN\')

 

 

 

ALL 子查询

ANY 可以表示任意的,但本案例中要求比所有销售员工资都高,那么就要使用另外一个
关键字 ALLALL 与关系操作符一起使用,表示与子查询中所有元素比较

 

--查询出比所有销售员的工资都高的员工姓名,工作,工资。

 

select ename,job,sal from emp where sal>all(select sal from emp where job=\'SALESMAN\')

 

 

Oracle中的伪列

 

Oracle 的表的使用过程中,实际表中还有一些附加的列,称为伪列。伪列就像表中
的列一样,但是在表中并不存储。伪列只能查询,不能进行增删改操作。rowid & rownum

 

rowid

表中的每一行在数据文件中都有一个物理地址, ROWID 伪列返回的就是该行的物理地
址。使用 ROWID 可以快速的定位表中的某一行。 ROWID 值可以唯一的标识表中的一行。由
ROWID 返回的是该行的物理地址,因此使用 ROWID 可以显示行是如何存储的。

 

rownum

在查询的结果集中, ROWNUM 为结果集中每一行标识一个行号,第一行返回 1,第二
行返回 2,以此类推。通过 ROWNUM 伪列可以限制查询结果集中返回的行数。

 

区别

ROWNUM ROWID 不同, ROWID 插入记录时生成, ROWNUM 查询数据时生成。
ROWID 标识的是行的物理地址。 ROWNUM 标识的是查询结果中的行的次序。


select rowid,ename from emp where sal>2000;

 

--查询出员工表中前 5 名员工的姓名,工作,工资。

 

select * from emp where rownum<=5;

 

 

Oracle函数

 

字符函数

 

 

 

 

 

数字函数

 

select to_char(sysdate,\'YYYY-MM-DD HH24:MI:SS\') "date" from dual

select to_char(sysdate,\'YYYY-MM-DD\') "date" from dual;

 

删除用户 如果用户下有对象必须要用cascade

SQL> drop user nod cascade;

User dropped

创建用户

SQL> create user nod identified by nod;

User created

SQL> grant connect to nod;

Grant succeeded

SQL> grant resource to nod;

Grant succeeded

SQL> grant create synonym to nod;

Grant succeeded

在plsql当中使用

SQL> conn sys/orcl@test as sysdba

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0

Connected as SYS

SQL> conn nod/nod@test as normal;

 

创建synonym

SQL> create synonym myEmp for scott.emp;

Synonym created

select * from myEmp

ORA-00942: 表或视图不存在

SQL> conn scott/orcl@test

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0

Connected as scott

SQL> grant all on emp to nod;

Grant succeeded

SQL> conn nod/nod@test

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0

Connected as nod

SQL> select * from myEmp;

 

 

 

序列 sequence

 

 

创建序列

CREATE SEQUENCE MYSEQ

MINVALUE 1

START WITH 1

NOMAXVALUE

INCREMENT BY 1

NOCYCLE

CACHE 30

 

使用序列

select MYSEQ.nextval from dual

 

 

 

表空间

 

在数据库系统中,存储空间是较为重要的资源,合理利用空间,不但能节省空间,还可以提高系统的效率和工作性能。 Oracle 可以存放海量数据,所有数据都在数据文件中存储。而数据文件大小受操作系统限制,并且过大的数据文件对数据的存取性能影响非常大。同时Oracle 是跨平台的数据库, Oracle 数据可以轻松的在不同平台上移植,那么如何才能提供统一存取格式的大容量呢? Oracle 采用表空间来解决。
表空间只是一个逻辑概念,若干操作系统文件(文件可以不是很大)可以组成一个表空间。表空间统一管理空间中的数据文件,一个数据文件只能属于一个表空间。一个数据库空间由若干个表空间组成。如图所示:

 

 

以上是关于每天一点点oracle的主要内容,如果未能解决你的问题,请参考以下文章

OracleOracle中使用转义字符

OracleOracle中的常用操作

OracleOracle的内外连接

oracleoracle的基础入门

OracleOracle版本导入导出问题

OracleOracle索引