创建数据库之前需要先安装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