Skip to content

Latest commit

 

History

History
83 lines (70 loc) · 2.95 KB

notes-oracle.md

File metadata and controls

83 lines (70 loc) · 2.95 KB

启动数据库

1. lsnrctl start /lsnrctl stop(不用在sqlplus)    #首先以oracle用户登录系统,source ~/bash_profile,启动监听
2. sqlplus  /nolog  #管理员登录,以system用户登录oracle
3. conn as sysdba   #用户名sys,密码sys
4. startup/shutdown     #启动/关闭数据库实例

sqlplus hp/123456@192.168.79.202:1521/hp
  oracle数据库的概念和mysql中不同,只有一个大数据库,里面可以有多个实例,每个实例里面有多个用户(相当于mysql中的数据库概念),和多个tablenamespace(存储数据,磁盘上的文件),每个用户都有一个对应的表空间,不同用户可以用同一个表空间

设置密码都为数字

切换用户

conn 用户名[/密码] as sysdba
切换到system账户:conn system/manager
切换sys用户:conn sys/change_on_install as sysdba

创建用户

create user c##用户名 identified by 密码;
grant create session to c##用户名;
GRANT CONNECT,RESOURCE,UNLIMITED TABLESPACE TO c##hp CONTAINER=ALL ;
grant connect,resource,dba to c##用户名;        赋予dba权限
注:c##用在容器数据库中

imp导入

用户先赋予dba权限
imp 用户名/密码 file=路径/文件名 full=y table_exists_action=replace

impdb导入
先创建路径变量
create directory 路径变量名 as '路径'
impdp 用户名/密码 directory=路径变量名 dumpfile=路径下的文件.dmp full=y table_exists_action=replace

两种导入方式,导出是什么,导入就是什么

遇到过的错误

ORA-01109:database not open
解决方案:1、sqlplus / as sysdba;--管理员登录
2、select con_id,name,open_mode from V$pdbs;--查看pdb的状态
3、alter pluggable database ORA19CPDB open;
4、alter session set container=ORA19CPDB ;
5、commit;
ora-01261和ora-01262
安装完后$ORACLE_HOME/dbs下可能没有init.ora文件,从sampl文件夹下考过去,并把文件下的路径占位符替换,并建立相应的文件夹。

存储过程案例

create procedure pro_insert_bonus as
    cursor emp_cursor is select EMPNO,JOB,SAL,COMM from EMP;  -- 定义游标
    ename varchar2(10);
    sql_str varchar2(200);
begin
    execute immediate 'truncate table BONUS';
    for emp_record in emp_cursor loop
        if emp_record.COMM is not null then
            sql_str:='insert into BONUS(ENAME, JOB, SAL, COMM) values (:1,:2,:3,:4) ';    -- 动态sql语句
            execute immediate sql_str using emp_record.EMPNO, emp_record.JOB, emp_record.SAL, emp_record.COMM;  -- 给占位符赋值
        elsif emp_record.COMM is null then
            sql_str:='insert into BONUS(ENAME, JOB, SAL, COMM) values (:1,:2,:3,0) returning ENAME INTO :4';
            execute immediate sql_str using emp_record.EMPNO, emp_record.JOB, emp_record.SAL returning into ename;
        end if;
    end loop;
    commit;
end;
/
begin
    PRO_INSERT_BONUS();    --调用存储过程
end;
/