oracle学习使用--oracle安装都安装为企业版

来源:互联网 发布:ff14人族捏脸数据分享 编辑:程序博客网 时间:2024/05/29 16:41

oracle启动必须启动的服务:Oracle 11g服务详细介绍及哪些服务是必须开启的?


-- oracle临时学习任务:

-- 1:创建表空间;创建用户;分配用户到表空间 http://blog.itpub.net/750660/viewspace-1114985/    授权:http://www.cnblogs.com/xmaomao/p/3273102.html

create tablespace CBL_OA_DATAlogging  datafile 'D:\CBL_OA_DATA2.dbf' --D:\app\Administrator\oradata\orcl\CBL_OA_DATA2.dbfsize 50mautoextend onnext 50m maxsize 20480mextent management local;

ALTER USER CBL_OA DEFAULT TABLESPACE  CBL_OA_DATA;


修改普通用的密码:

alter user userName identified by passWord;


-- 2:删除所有的表:通过删除表空间实现 http://blog.csdn.net/oscar999/article/details/7468153   删除用户表空间

DROP TABLESPACE tablespace_name INCLUDING CONTENTS AND DATAFILES;


oracle11g之后密码默认180天有效,这里进行修改

SELECT  *  FROM  dba_profiles  WHERE  profile='DEFAULT'  AND  resource_name='PASSWORD_LIFE_TIME'; ALTER  PROFILE  DEFAULT  LIMIT  PASSWORD_LIFE_TIME  UNLIMITED;





-- 3:查看数据库版本

要dba用户才行

select * from v$instance;

如果要查看自己是专业版本还是企业版本还是个人版本,可以直接登录sqlplus的时候可以看到,版本要一直,否则导入导出可能出现问题;

oracle查看版本



oracle如何卸载干净,找到Universal Installer进行卸载; 要停止所有的服务;

注册表可以不删除


-- 4:oracle不能使用系统关键字,使用关键字都要用"",加了双引号之后是严格区分大小的

DROP TABLE "table";      SELECT * FROM "table";

数据库列名使用了关键字怎么办?


系统错误码:

 ORA-28000:账号被锁定;

ORA-01017: invalid username/password; logon denied 错误; 账号和密码错误,重新修改;

ORA-00988: 口令缺失或无效,密码或格式无效;


-- 5 :系统用户查看所有的用户:

select username,password from dba_users; -- 查看所有的用户 alter USER CBL_OA IDENTIFIED BY W1Q2W3E4R5T88cbl; -- 修改密码;注意密码不用带有引号;commit;如果报错:ORA-00988: 口令缺失或无效,就是密码格式无效,不能包含特殊字符;账号解锁:ALTER USER CBL_OA ACCOUNT UNLOCK;


-- 6: oracle 中的 VARCHAR,VARCHAR2,NVARCHAR2如何取舍 varchar 已经不建议使用了 varchar2(100):只能存100个字符或者50个汉字 NVARCHAR2: 可以存储100汉字或者100个字符 平时就用NVARCHAR2


nvarchar2最多能存2000个字符; varchar2最多能存4000个字符; 超过4000个字符就要用Blob, Clob了? Clob专门存储大文本的;Blob专门存储二进制的其他文件;


ORACLE 日期函数,date和timestamp ,timestamp是data的升级版本

Oracle 字符串转换TIMESTAMP类型或Date类型


--7: 系统管理的sql语句

1、查询数据库中的表空间名称

1)查询所有表空间

select tablespace_name from dba_tablespaces; 
select tablespace_name from user_tablespaces; 

2)查询使用过的表空间  

select distinct tablespace_name from dba_all_tables;

select distinct tablespace_name from user_all_tables; 

2、查询表空间中所有表的名称

select table_name from dba_all_tables where tablespace_name = tablespacename

3、查询系统用户

select * from all_users
select * from dba_users

4、查看当前连接用户

select * from v$session

5、查看当前用户权限

select * from session_privs

6、查看所有的函数和存储过程

select * from user_source

其中TYPE包括:PROCEDURE、FUNCTION

7、查看表空间使用情况

select a.file_id "FileNo",
       a.tablespace_name "表空间",
       a.bytes "Bytes",
       a.bytes - sum(nvl(b.bytes, 0)) "已用",
       sum(nvl(b.bytes, 0)) "空闲",
       sum(nvl(b.bytes, 0)) / a.bytes * 100 "空闲百分率"
  from dba_data_files a, dba_free_space b
 where a.file_id = b.file_id(+)
 group by a.tablespace_name, a.file_id, a.bytes
 order by a.tablespace_name;

HTTP

http://www.cnblogs.com/ITGIS/articles/1763993.html


8:解决ORA-00904: invalid identifier标识符无效

出现这种问题,如果是创建表基本上是创建表的时候使用了,系统关键字,可以查看:

Oracle 关键字(保留字) 大全

包括,uid;type; types


Mysql 关键字-保留字

10 : oracle 日期比较

END_TIME < sysdateto_date(CREATE_TIME,'YYYY-MM-DD HH24:MI:SS') < sysdate


10: oracle如何实现自增

oracle 字段自增 两段代码搞定


11:关于分页,SQLServer中的top、MySql中的limit、Oracle中的rownum的区别


9:解决ORA-2516: 数据库连接池占用满了

监听程序找不到符合协议堆栈要求的可用处理程'错误,要解决该问题首先查看一下数据库现有的进程数,是否已经达到参数processes的大小。

数据库连接池问题: 

ORA-12516

oracle默认数据库连接数150个

Listener refused the connection with the following error 错误解


-- 正在使用数据库不要随便停掉,数据库连接占用,可能要半个小时才能关闭掉,或者半天select count(*) from v$process ; -- 查看数据库当前的连接数量select value from v$parameter where name = 'processes'; -- 查看允许的最大连接数select username,count(username) from v$session where username is not null group by username; -- 查看个个用户占用的连接数Select count(*) from v$session where status='ACTIVE'; -- 查看并发的连接数select * from v$session where username is not null; -- 详细查看用户的连接的情况-- 杀死用户下面的sid,serival,usernameselect sid,serial#,username from V$session where username like 'SAFETY';
-- 关闭tomcat 数据库连接池归还的也很慢--alter system kill session '7,47878' immediate;  -- 立即杀死


10:plsql的问题设置访问数据库地址的问题

查询PLSQL Developer\instantclient_11_2\tnsnames.ora 找到ip地址进行修改,如下例子:

tnsnames.org修改数据库地址和端口演示



11:Oracle导入导出的问题

oracle数据的导入导出是常见的问题,一般有两种方案,第一个使用plsql带有的工具,第二使用imp或者exp原始命令,推荐使用第二种,第一种本质上用的还是oracle的命令。

参见:

Oracle 导出、导入某用户所有数据(包括表、视图、存储过程...)

下面演示基于用户的导入导出

plsql导入情况查看

导入导出示例

创建用户并且授权— Create the user create user HR2  identified by HR  default tablespace USERS  temporary tablespace TEMP  profile DEFAULT;— Grant/Revoke role privileges grant resource to HR2;grant connect to HR2;— Grant/Revoke system privileges grant alter session to HR2;grant create database link to HR2;grant create sequence to HR2;grant create session to HR2;grant create synonym to HR2;grant create view to HR2;grant unlimited tablespace to HR2;

导出和导入示例

exp 'sys/system12e4Q@orcl as sysdba' owner=HR file='%USERPROFILE%\Desktop\hr.dmp'  ignore=y 这两个句都是cmd命令不是plsql命令,最后不要加; imp 'sys/system12e4Q@ORCL as sysdba' fromuser = hr touser =  hr2 file='%USERPROFILE%\Desktop\hr.dmp' ignore=y

导入dmp文件报错:IMP-00038 和IMP-00000,如果报错则导出用的expdp,现在导入也用impdp

impdp导入dmp文件ORA-39088: 文件名不能包含路径说明ORA-39001: 参数值无效ORA-39000: 转储文件说明错误

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

12 : ORACLE 使用最新的expdp和impdb进行导入导出

ORA-39001: 参数值无效
ORA-39000: 转储文件说明错误

ORA-39088: 文件名不能包含路径说明

通过文章:http://blog.csdn.net/zengmingen/article/details/51657900

知道impdp命令只可导入expdp导出的dmp文件。expdp导出的时候,需要创建 DIRECTORY

导出什么表空间,导入也要什么表空间。

导出什么用户,导入也要什么用户。

如果没有要新建。

expdp / impdp 用法详解,可以按照用户、表空间、数据库、表来导入导出

一  关于expdp和impdp     使用EXPDP和IMPDP时应该注意的事项:
EXP和IMP是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
EXPDP和IMPDP是服务端的工具程序,他们只能在ORACLE服务端使用,不能在客户端使用。
IMP只适用于EXP导出的文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出的文件,而不适用于EXP导出文件。
expdp或impdp命令时,可暂不指出用户名/密码@实例名 as 身份,然后根据提示再输入,如:
expdp schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;
一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建。
create directory dpdata1 as 'd:\test\dump';

二、查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select * from dba_directories;
三、给scott用户赋予在指定目录的操作权限,最好以system等管理员赋予。
grant read,write on directory dpdata1 to scott;
四、导出数据
1)按用户导
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp DIRECTORY=dpdata1;

解释:导出orcl这个是oracle实例下面的scott用户,导出后放到一个oracle创建并管理的逻辑目录dpdata1里面的expdb.dmp里面;创建虚目录见上面的方法。
2)并行进程parallel
expdp scott/tiger@orcl directory=dpdata1 dumpfile=scott3.dmp parallel=40 job_name=scott3
3)按表名导
expdp scott/tiger@orcl TABLES=emp,dept dumpfile=expdp.dmp DIRECTORY=dpdata1;
4)按查询条件导
expdp scott/tiger@orcl directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20';
5)按表空间导
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example;
6)导整个数据库
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=full.dmp FULL=y;
五、还原数据
1)导到指定用户下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott;
2)改变表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system;
3)导入表空间
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=example;
4)导入数据库
impdb system/manager DIRECTORY=dump_dir DUMPFILE=full.dmp FULL=y;
5)追加数据
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=system TABLE_EXISTS_ACTION


oracle创建逻辑目录

记着还有给用户授予指定目录的读写权限,否则报错:EXPDP和IMPDP使用ORA-39087目录名无效

ORA-00439未启用的功能:DEFERRED_SEGMENT_CREATION,oracle导入导出的使用使用的版本不一致,专业版、标准版导致的;


oracle 39165 :未找到方案 safety  ;  可能是导入导出不是一个用户

-- 查询dba所有的虚目录或者说逻辑目录select  * from dba_directories;-- 自己创建一个逻辑目录create directory dmp_dir as 'c:\oracle\dazer\my_back_dir';-- 给scott用户授权访问逻辑目录的权限GRANT READ,WRITE ON DIRECTORY DMP_DIR to scott; 


升级版导入导出,注意逻辑目录要提前查看;

— 创建表空间,如果导出的数据库在一个单独的表空间,要创建    create tablespace CBL_OA_TEST_DATA      logging        datafile 'C:\oracle\dazer\oradata\mydbf\CBL_OA_TEST_DATA.dbf' —D:\app\Administrator\oradata\orcl\CBL_OA_DATA2.dbf            size 50m      autoextend on      next 50m maxsize 20480m  GRANT READ,WRITE ON DIRECTORY DMP_DIR to oatest;  — 授予oatest用户访问逻辑路径dmp_dir的读写权限;


 expdp scott/tiger@orcl directory=dmp_dir dumpfile=myscott.dmp schemas=scott  — 最后不要加分号;导出scott用户到逻辑目录dmp_dir下面的myscott.dmp文件里面impdp oatest/oatest schemas=oatest directory=dmp_dir dumpfile=OATEST20171011-10.DMP —最后不要加分号;导入dmp_dir逻辑路径下面的dmp文件到用户oatest里面;


13:oracle数据库备份与恢复的几种方式

根据oracle数据库的特点和提供的工具,主要方法有以下几种方法:

  1.      利用逻辑备份使用import工具丢失数据的表
  2.      利用物理备份来通过还原数据文件并进行不完全恢复
  3.      利用dbms_logmnr包从redo log文件中恢复
  4.      利用flashback特性恢复数据

14: Oracle-本地连接没问题,远程连接有问题解决方案


15: Oracle 导入导出 的 三种方式

使用plsql导入导出



16:ORACLE中SID和SERVICE_NAME的区别

select INSTANCE_NAME from v$instance; -- 查询oralce的实例名称,结果:zjscbldb2select name from v$database; -- 查询oracle数据库的名称,一个oracle只有一个数据库,但是可能有多个实例,比如 oracle rac.;结果:ZJSCBLDB
JDBC连接数据库使用SERVICE NAME、SID以及TNSName不同写法
jdbc连接数据库使用sid和service_name的区别 ?

数据库名称叫做ZJSCBLDB,实例名称是两个zjscbldb1,zjscbldb2



JDBC连接Oracle RAC的连接串配置


Oracle 删除重复数据只留一条


数据库表被锁定了,导致用程序执行很慢,正常0.5s,这个慢要28s,最后发现是表被锁定了

--3.查出锁定表的sid, serial#,os_user_name, machine_name, terminal,锁的type,modeSELECT s.sid, s.serial#, s.username, s.schemaname, s.osuser, s.process, s.machine,s.terminal, s.logon_time, l.typeFROM v$session s, v$lock lWHERE s.sid = l.sidAND s.username IS NOT NULLORDER BY sid;这个语句将查找到数据库中所有的DML语句产生的锁,还可以发现,任何DML语句其实产生了两个锁,一个是表锁,一个是行锁。--杀掉进程 sid,serial#alter system kill session'210,11562';