每天一点点oracle
每天一点点oracle sqlplus / as sysdba [[email?protected] ~]$ 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的一些工具 工具位置: [[email?protected] bin]$ pwd /u01/app/oracle/product/11.2.0.3/db_1/bin [[email?protected] ~]$ 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 [[email?protected] ~]$ 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. [[email?protected] bin]$ oerr ora 7300 查看一定的报错信息 ? sqlplus文件的位置 [[email?protected] 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错误日志的记录位置 [[email?protected] 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 ? [[email?protected] ~]$ sqlplus / as sysdba ? SQL*Plus: Release 11.2.0.3.0 Production on Mon Sep 24 15:18:19 2018 ? Copyright (c) 1982,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 ? [[email?protected] dbs]$ ls hc_orcl.dat init.ora lkORCL orapworcl spfileorcl.ora [[email?protected] 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. [[email?protected] 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是一直在累加的 ? 警告日志路径 [[email?protected] trace]$ pwd /u01/app/diag/rdbms/orcl/orcl/trace [[email?protected] trace]$ tail -200f alert_orcl.log #查看有没有开归档 SQL> select log_mode from v$database; ? LOG_MODE ------------------------ NOARCHIVELOG 没有开 归档可以做备份和恢复 如果数据库是归档模式,可以在数据库open状态下进行备份,热备份 ? ? [[email?protected] 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 ? ? 查看监听状态 [[email?protected] ~]$ 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 ? Between…and操作 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,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,deptno from emp where deptno in (select deptno from dept where dname=‘SALES‘) ? select ename,deptno from emp where deptno=(select deptno from dept where dname=‘SALES‘) ? ? ? 在Oracle当中 不区分列名的大小写 ? ? Any Any放在比较运算符后面 表示任意的意思 ? ? --查询出 Emp 表中比任意一个销售员("SALESMAN" )工资低的员工姓名、工作、工资 ? select ename,sal from emp where sal<any (select sal from emp where job=‘SALESMAN‘) ? ? ? ALL 子查询 ANY 可以表示任意的,但本案例中要求比所有销售员工资都高,那么就要使用另外一个 ? --查询出比所有销售员的工资都高的员工姓名,工作,工资。 ? select ename,sal from emp where sal>all(select sal from emp where job=‘SALESMAN‘) ? ? Oracle中的伪列 ? 在 Oracle 的表的使用过程中,实际表中还有一些附加的列,称为伪列。伪列就像表中 ? rowid 表中的每一行在数据文件中都有一个物理地址, ROWID 伪列返回的就是该行的物理地 ? rownum 在查询的结果集中, ROWNUM 为结果集中每一行标识一个行号,第一行返回 1,第二 ? 区别 |