您的位置:首页 > 数据库 > Oracle

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

2015-08-25 19:34 597 查看

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息