包子的 oracle 学习笔记---创建数据库

ORACLE学习

目录

  • ORACLE学习
    • 目录
    • 创建数据库
      • 第一步
      • 第二步
      • 第三步
    • 创建表空间 创建用户
    • 导出导入数据库
    • 删除用户以及对应所有数据
    • 遇到锁表的处理办法

创建数据库

第一步

创建数据库之前需要先安装oracle服务端.
完后使用 Database Configuration Assistant 来创建数据库即可.
这里需要注意的是字符集. 这个很重要因为不能修改要想好应该用什么.

第二步

使用 Net Configuration Assistant 来配置监听与数据库命名

第三步

如果想在本地使用 PL/SQL Developer 连接 oracle 需要先在本地安装 oracle 的小型客户端版本.
完后配置
D:\app\Administrator\product\11.2.0\client_1\network\admin\tnsnames.ora 文件.


随意起的名字用于显示 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 数据库链接地址.[可以是服务器机器名])(PORT = 1521[端口号.一般默认都是1521]))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = 数据库名字)
    )
  )

创建表空间 创建用户

使用PL/SQL登录管理员权限账户.
使用以下语句在sql执行里创建表空间

--表空间(表空间名称:AAAAA_SP,表空间文件:tablespace)  
CREATE TABLESPACE GJXFJ_SP  
DATAFILE 'D:\AAAAA\tablespace' size 100M  
         EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;   
--索引表空间(表空间索引名称:AAAAA_Index,表空间索引文件:tablespace_Index)  
CREATE TABLESPACE GJXFJ_Index  
DATAFILE 'D:\AAAAA\tablespace_Index' size 100M           
         EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO;   

对于表空间的后续操作.

--对哪个表空间追加物理地址.(因为限制.每个表空间文件最大只能32GB)
alter tablespace AAAAA_SP add datafile 'D:\AAAAA\tablespace1' size 100M;

--将表空间设置为自动增长.
alter database datafile 'D:\AAAAA\tablespace' autoextend on[off 不自动];

--查询指定表空间物理地址数量以及是否自动增长
select tablespace_name,file_name,autoextensible from dba_data_files where tablespace_name = 'AAAAA_SP';

--修改表空间大小(在不自动增长时设置合适大小)
ALTER DATABASE DATAFILE 'D:\AAAAA\tablespace' AUTOEXTEND ON NEXT 200M MAXSIZE UNLIMITED;

--删除表空间以及其中所有内容
 drop tablespace AAAAA_SP including contents and datafiles; 

创建用户

--2.建用户  
create user 用户名 identified by 密码  
default tablespace AAAAA_SP[表空间名称]; 
--为已存在的用户追加表空间
alter user 用户名 default tablespace 表空间名称;

给用户赋予权限

--3.赋权  根据需要赋予权限
grant connect,resource to 用户名;  
grant create any sequence to 用户名;  
grant create any table to 用户名;  
grant delete any table to 用户名;  
grant insert any table to 用户名;  
grant select any table to 用户名;  
grant unlimited tablespace to 用户名;  
grant execute any procedure to 用户名;  
grant update any table to 用户名;  
grant create any view to 用户名;  
grant resource to 用户名;
grant dba to 用户名;

这个是做什么用的我也不知道.不过我每次都创建.

create or replace directory expdir as 'D:/AAAAA/dmp';
grant read,write on directory expdir to public;

查询创建的数据结果

select * from dba_directories;

导出导入数据库

CMD执行命令

用什么导出 就用什么导入. 并且注意 导出导入数据库字符集 以及版本号

--导出

exp 用户名/密码@127.0.0.1\数据库名 file=E:\201508212005.dmp log=E:\201508212005.log full=y

expdp 用户名/密码@127.0.0.1\数据库名 dumpfile=201505252120.DMP FULL=y;
--导入
imp 用户名/密码@127.0.0.1\数据库名 file=E:\201508131620.DMP log=E:\201508131620.log full=y

Impdp 用户名/密码@127.0.0.1\数据库名 file=201508131620.DMP full=y

使用PL/SQL工具导入导出.

工具–导出用户对象. 可以导出用户下所有表.事物.存储.序列.索引等.但是无法导出数据.

工具–导出表. 其中3中导出方式均可以导出数据.
但是 SQL 与 PL/SQL方式无法导出 二进制字段的表 比如带有BLOB CLOB等.


删除用户以及对应所有数据.

--删除用户以及用户下的所有数据
drop user 用户名 cascade[cascade为删除用户下所有数据];

--查询当前使用进程.可以杀掉这个进程
select username,sid,serial# from v$session
alter system kill SESSION 'sid,serial' immediate
[immediate 为可选强制杀进程]

遇到锁表的处理办法

查询锁表的原因.

--查询执行锁表错误的原因SQL'
SELECT L.SESSION_ID SID,
       S.SERIAL#,
       L.LOCKED_MODE,
       L.ORACLE_USERNAME,
       S.USER#,
       L.OS_USER_NAME,
       S.MACHINE,
       S.TERMINAL,
       A.SQL_TEXT,
       A.ACTION
  FROM V$SQLAREA A, V$SESSION S, V$LOCKED_OBJECT L
 WHERE L.SESSION_ID = S.SID  
   AND S.PREV_SQL_ADDR = A.ADDRESS
 ORDER BY SID, S.SERIAL#;

查询锁表的用户

--查询进程ID'
SELECT L.SESSION_ID SID,
       S.SERIAL#,
       L.LOCKED_MODE,
       L.ORACLE_USERNAME,
       L.OS_USER_NAME,
       S.MACHINE,
       S.TERMINAL,
       O.OBJECT_NAME,
       S.LOGON_TIME
  FROM V$LOCKED_OBJECT L, ALL_OBJECTS O, V$SESSION S
 WHERE L.OBJECT_ID = O.OBJECT_ID
   AND L.SESSION_ID = S.SID
 ORDER BY SID, S.SERIAL#;

查询锁表进程,并且生成杀掉语句

--查询锁表进程 并且生成杀掉进程语句
SELECT 'ALTER SYSTEM KILL SESSION ''' || SID || ',' || SERIAL# || ''';'
  FROM (

        SELECT DISTINCT A.SID,
                         A.SERIAL#,
                         STATUS,
                         MACHINE,
                         LOCKWAIT,
                         LOGON_TIME

          FROM V$SESSION A, V$LOCKED_OBJECT B

         WHERE (A.STATUS = 'ACTIVE' OR A.STATUS = 'INACTIVE')

           AND A.SID = B.SESSION_ID

        --AND B.ORACLE_USERNAME='用户名'--用户名

        --AND B.OS_USER_NAME = '机器名字'--电脑的机器名称

        )

需要学习的东西真的还有很多很多啊.T.T

你可能感兴趣的:(oracle,学习,创建数据库)