1:切换数据库的临时表空间为temp1/ 切换数据库的undo表空间为 undotbs01
要在Oracle中切换数据库的临时表空间为"temp1",可以按照以下步骤进行操作:
-
首先,登录到目标数据库实例,可以使用SQL*Plus或任何其他管理工具。
-
确保你有管理员或具有适当权限的用户。
-
先创建临时表空间:
CREATE TEMPORARY TABLESPACE temp1 TEMPFILE '/u01/app/oracle/oradata/orcl/temp1_01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 2000M;
-
运行以下SQL语句以更改临时表空间:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp1;
这将将默认临时表空间更改为"temp1"。
-
查看是否修改成功
SELECT PROPERTY_NAME, PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';
缩短长度便于查看
col PROPERTY_VALUE format a20
如果要切换数据库的UNDO表空间为"undotbs01",可以按照以下步骤进行操作:
-
登录到目标数据库实例。
-
确保你有管理员或具有适当权限的用户。
-
创建undotbs01表
CREATE UNDO TABLESPACE undotbs01 DATAFILE '/u01/app/oracle/oradata/orcl/undotbs01_1.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED;
-
运行以下SQL语句以更改UNDO表空间:
ALTER SYSTEM SET undo_tablespace = undotbs01;
这将将UNDO表空间更改为"undotbs01"。
-
查看是否创建成功
SELECT TABLESPACE_NAME, STATUS
FROM DBA_TABLESPACES
WHERE TABLESPACE_NAME = 'UNDOTBS01';
完成
2:创建两个简单表A,B。AB表有相关联的列并在关联列上创建索引。
首先,我们来创建表 A:
CREATE TABLE A (
id NUMBER,
name VARCHAR2(50),
CONSTRAINT pk_a PRIMARY KEY (id)
);
以上语句创建了一个名为 A 的表,包含了一个 id 列和一个 name 列。id 列被定义为主键,使用主键约束 “pk_a”。
接下来,让我们创建表 B,并添加一个与表 A 相关联的外键列:
CREATE TABLE B (
id NUMBER,
a_id NUMBER,
data VARCHAR2(100),
CONSTRAINT fk_b_a FOREIGN KEY (a_id) REFERENCES A(id)
);
以上语句创建了一个名为 B 的表,包含了一个 id 列、一个 a_id 列和一个 data 列。a_id 列被定义为外键,并引用了表 A 中的 id 列。
-- 向表 A 插入数据
INSERT INTO A (id, name) VALUES (1, '张三');
INSERT INTO A (id, name) VALUES (2, '李四');
INSERT INTO A (id, name) VALUES (3, '王五');
-- 向表 B 插入数据,引用表 A 中的数据
INSERT INTO B (id, a_id, data) VALUES (1, 1, 'hsl');
INSERT INTO B (id, a_id, data) VALUES (2, 2, 'zgc');
INSERT INTO B (id, a_id, data) VALUES (3, 3, 'zhf');
现在,我们来在关联列 a_id 上为表 B 创建索引:
CREATE INDEX idx_b_a_id ON B(a_id);
以上语句创建了一个名为 idx_b_a_id 的索引,它是在表 B 的 a_id 列上建立的。
索引的使用:
- 使用索引进行简单查询:
SELECT * FROM B WHERE a_id = 1;
这个查询语句将使用索引idx_a_id
来查找所有a_id
等于1的行,从而提高查询速度。
- 使用索引进行连接查询:
SELECT B.data, A.name FROM B
JOIN A ON B.a_id = A.id;
这个查询语句将使用索引idx_a_id
来加速表B和表A之间的连接操作,提高查询性能。
- 使用索引进行排序:
SELECT * FROM B ORDER BY a_id;
这个查询语句将使用索引idx_a_id
来帮助排序结果,提高排序操作的效率。
3:创建一个事务级临时表或者会话级临时表并测试在什么情况下临时表里的数据会消失
- 创建会话级临时表
create global temporary table GG( id int, name char(20));
- 插入数据
insert into GG values(1,'hsl'); insert into GG values(2,'zgc'); insert into GG values(3,'hjl');
- 查看数据
-
查看t表的结构
select object_name,object_type from user_objects;
事务提交之后就消失啦
查看t表的数据
select * from t;
不提交直接退出,再查看是不是会消失
无数据
总结
- 会话结束:对于会话级临时表,在会话结束后,表中的数据会自动删除。
- 事务提交:对于全局临时表(模拟事务级临时表),在每个事务提交之后,表中的数据会自动删除。如果您在会话中执行多个事务,并在每个事务中插入数据到临时表中,当每个事务提交时,临时表中的数据都会消失。
4:创建一个小表表空间A。一个大表表空间B并创建一个用户B1默认表空间为B
-- 创建小表表空间 A
CREATE TABLESPACE A
DATAFILE '/u01/app/oracle/oradata/orcl/datafile_A.dbf'
SIZE 10M;
-- 创建大表表空间 B
CREATE TABLESPACE B
DATAFILE '/u01/app/oracle/oradata/orcl/datafile_B.dbf'
SIZE 1G;
-- 创建用户 B1 并将其默认表空间设置为 B
CREATE USER B1 IDENTIFIED BY password
DEFAULT TABLESPACE B
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON B;
-- 授权给用户 B1 的权限
GRANT CONNECT, RESOURCE TO B1;
中,/u01/app/oracle/oradata/orcl
/datafile_A.dbf
和 /u01/app/oracle/oradata/orcl
/datafile_B.dbf
是数据文件所在的路径,需要根据实际情况进行修改。password
是用户 B1 的密码。QUOTA UNLIMITED ON B
则表示用户 B1 在表空间 B 中的可用空间是无限的。
执行以上 SQL 语句后,将创建一个名为 A 的小表表空间,一个名为 B 的大表表空间,并创建一个名为 B1 的用户,其默认表空间为 B。