一 : ASP.NET中使用数据处理插入数据注意的问题
很多时候,我们都会习惯将数据库连接的初始化过程交给Page_Load去做,其实这样子有好处也有坏处,好处是单边问题的时候,这种方法很实用,坏处就是遇到多边的问题时,就种情况这不太好用了!例如下面的例子:
///ForExample: <scriptlanguage="C#"runat="server"> SqlConnectionmySqlCon; protectedvoidPage_Load(ObjectSrc,EventArgsE) { mySqlCon=newSqlConnection("server=localhost;uid=sa;pwd=sa;database=pubs");//初始化过程 if(!IsPostBack) BindGrid(); } publicvoidAddPublisher(Objectsender,EventArgsE) { StringmyinsertCmd="insertintopublishers(pub_id,pub_name,city,state,country)values(@pubid,@pubname,@city,@state,@country)"; SqlCommandmySqlCom=newSqlCommand(myinsertCmd,mySqlCon);//初始化命令调用 //实现配套 mySqlCom.Parameters.Add(newSqlParameter("@pubid",SqlDbType.Char,4)); mySqlCom.Parameters["@pubid"].Value=Pub_Id.Text; mySqlCom.Parameters.Add(newSqlParameter("@pubname",SqlDbType.VarChar,40)); mySqlCom.Parameters["@pubname"].Value=Pub_Name.Text; mySqlCom.Parameters.Add(newSqlParameter("@city",SqlDbType.VarChar,20)); mySqlCom.Parameters["@city"].Value=City.Text; mySqlCom.Parameters.Add(newSqlParameter("@state",SqlDbType.Char,2)); mySqlCom.Parameters["@state"].Value=State.Text; mySqlCom.Parameters.Add(newSqlParameter("@country",SqlDbType.VarChar,30)); mySqlCom.Parameters["@country"].Value=Country.Text; //打开DB mySqlCom.Connection.Open(); mySqlCom.ExecuteNonQuery(); Message.InnerHtml="<b>已添加记录</b><br/>"; mySqlCom.Connection.Close(); Pub_Id.Text=""; Pub_Name.Text=""; City.Text=""; State.Text=""; Country.Text=""; BindGrid(); } //子函数调用 publicvoidBindGrid() { SqlDataAdaptermySqlCom=newSqlDataAdapter("select*frompublisherswherepub_idlike'99%'",mySqlCon); DataSetmyds=newDataSet(); mySqlCom.Fill(myds,"publishers"); dgMyGrid.DataSource=myds.Tables["publishers"].DefaultView;dgMyGrid.DataBind(); } </script> <h2>添加一个新的发行者:</h2> <br/> 发行者ID应以99打头,并包含4位数字<br/> 发行者ID: <asp:textboxid="Pub_Id"runat="server"/>姓名: <asp:textboxid="Pub_Name"runat="server"/> 城市: <asp:textboxid="City"runat="server"/> <br/> 省: <asp:textboxid="State"runat="server"/> 国家: <asp:textboxid="Country"runat="server"/> <br/> <br/> <asp:buttonText="提交"OnClick="AddPublisher"runat="server"ID="Button1"/><br/> <spanid="Message"runat="server"/> <br/> <asp:DataGridid="dgMyGrid"runat="server"/> |
这样的例子初初看起来没有问题,调试也没报错,但在生成的页面添加数据后提交时就会报错,说什么属性不配套之类的话。是什么原因造成的呢!其实,这就是初始化过程在页面装载时造成的,但这里有个问题我始终没能搞清楚,就是既然是在页面初始化过程已经初始化过DB实例了,按道理来讲应该可以直接生成套用的啊,但好像没有!还是要把初始化过程放到具体的函数里面才能实现!看下面:
<<scriptlanguage="C#"runat="server"> protectedvoidPage_Load(ObjectSrc,EventArgsE) { //页面装载过程中直接使用IF语句,其实什么也不加! if(!IsPostBack) BindGrid(); } publicvoidAddPublisher(Objectsender,EventArgsE) { stringstrprovider="server=localhost;uid=sa;pwd=sa;database=pubs";//构造初始化过程 SqlConnectionmySqlCon=newSqlConnection(strprovider); stringmyinsertCmd="insertintopublishers(pub_id,pub_name,city,state,country)values(@pubid,@pubname,@city,@state,@country)"; SqlCommandmySqlCom=newSqlCommand(myinsertCmd,mySqlCon);//初始化过程实现 mySqlCom.Parameters.Add(newSqlParameter("@pubid",SqlDbType.Char,4)); mySqlCom.Parameters["@pubid"].Value=Pub_Id.Text; mySqlCom.Parameters.Add(newSqlParameter("@pubname",SqlDbType.VarChar,40)); mySqlCom.Parameters["@pubname"].Value=Pub_Name.Text; mySqlCom.Parameters.Add(newSqlParameter("@city",SqlDbType.VarChar,20)); mySqlCom.Parameters["@city"].Value=City.Text; mySqlCom.Parameters.Add(newSqlParameter("@state",SqlDbType.Char,2)); mySqlCom.Parameters["@state"].Value=State.Text; mySqlCom.Parameters.Add(newSqlParameter("@country",SqlDbType.VarChar,30)); mySqlCom.Parameters["@country"].Value=Country.Text; mySqlCom.Connection.Open(); mySqlCom.ExecuteNonQuery(); Message.InnerHtml="<b>已添加记录</b><br>"; mySqlCom.Connection.Close(); Pub_Id.Text=""; Pub_Name.Text=""; City.Text=""; State.Text=""; Country.Text=""; BindGrid(); } publicvoidBindGrid()子函数调用时同样也要初始化DB连接 { stringstrprovider="server=dev;uid=sa;pwd=pauperboyboy;database=pubs"; SqlConnectionmySqlCon=newSqlConnection(strprovider); SqlDataAdaptermySqlCom=newSqlDataAdapter("select*frompublisherswherepub_idlike'99%'",mySqlCon); DataSetmyds=newDataSet(); mySqlCom.Fill(myds,"publishers"); dgMyGrid.DataSource=myds.Tables["publishers"].DefaultView; dgMyGrid.DataBind(); } </script> <h2>添加一个新的发行者:</h2> <br> 发行者ID应以99打头,并包含4位数字<br> 发行者ID: <asp:textboxid="Pub_Id"runat="server"/>姓名: <asp:textboxid="Pub_Name"runat="server"/> 城市: <asp:textboxid="City"runat="server"/> <br> 省: <asp:textboxid="State"runat="server"/> 国家: <asp:textboxid="Country"runat="server"/> <br> <br> <asp:buttonText="提交"OnClick="AddPublisher"runat="server"ID="Button1"/><br> <spanid="Message"runat="server"/> <br> <asp:DataGridid="dgMyGrid"runat="server"/> </form>> |
经过这样修改后,我们才能在真正意义上实现数据的增加!
二 : 11g使用非duplicate方式创建物理standby要注意的问题总结
在上篇博文中,使用了duplicate方式来创建物理standbyhttp://blog.csdn.net/aaron8219/article/details/38434579今天来说说在11g中采用非duplicate方式创建备库碰到的一些问题,并做个总结。
在10g中,通常可以使以下几种方法创建备库控制文件
RMAN> backup current controlfile for standby format 'c:\ctl_%U';
RMAN> backup full database format 'c:\backup\full_%U' include current controlfile for standby;
RMAN> copy current controlfile for standby to 'c:\backup\control01.ctl';
SQL> alter database create standby controlfile as 'c:\backup\control01.ctl';
前两种生成的是备库控制文件的备份集,需要在nomount状态下,用RMAN命令restore,如:
SQL> startup nomount
RMAN> restore controlfile from 'c:\backup\xxxx';
而后两种是直接创建备库控制文件。一种是通过RMAN命令的方式,另一种是通过SQL命令的方式,创建出来的备库控制文件,可以直接复制到备库目标路径后用来启动备库到mount状态,如:
复制到C:\app\oracle\oradata\tc并冗余(CONTROL01.CTL,CONTROL02.CTL)后,可以直接在备库执行
SQL> startup mount --直接启动到mount状态,不需要RMAN恢复
但是在11g中,RMAN备份不再支持以“backup current controlfile for standby”或“include current controlfile for standby”来创建备库控制文件,虽然命令仍然可以执行成功,但是当你在备库恢复完控制文件并启动到mount状态下,你会发现这个控制文件依旧是主库的控制文件,如:
RMAN> restore controfile from 'c:\backup\xxxx';
RMAN> alter database mount;
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY --注意,数据库角色是由控制文件决定的,这里是primary,说明是用主库控制文件启动的
如果没有注意到这点,那么当你恢复完数据库文件,并启用REDO APPLY的时候,就会报错,提示不是备用数据库。
所以,如果不是用duplicate方式来创建备库的话,要注意使用创建文件的方式直接生成备库控制文件,而不是生成RMAN备份集
上次使用了RMAN的duplicate方式来配置DG物理备库,那么这次就用非duplicate方式来做一次,其实步骤大致和10g是一致的,可以参考我以前搭建10g DG的博客,惟一不同的是,不再使用备份集来恢复备库控制文件
具体步骤(略),直接跳到完成数据库数据文件恢复后
--查看备库的日志文件
SQL> set lin 120 pages 120
SQL> col member for a60
SQL> select group#,member from v$logfile;
GROUP# MEMBER
---------- ------------------------------------------------------------
2 C:\APP\ORACLE\ORADATA\TC\GROUP_2.262.855057605
2 +FRA/tc/onlinelog/group_2.258.855057607
1 C:\APP\ORACLE\ORADATA\TC\GROUP_1.261.855057597
1 +FRA/tc/onlinelog/group_1.257.855057601
3 C:\APP\ORACLE\ORADATA\TC\GROUP_3.266.855058587
3 +FRA/tc/onlinelog/group_3.259.855058591
4 C:\APP\ORACLE\ORADATA\TC\GROUP_4.267.855058593
4 +FRA/tc/onlinelog/group_4.260.855058595
5 C:\APP\ORACLE\ORADATA\TC\STB_REDO05.LOG
6 C:\APP\ORACLE\ORADATA\TC\STB_REDO06.LOG
7 C:\APP\ORACLE\ORADATA\TC\STB_REDO07.LOG
8 C:\APP\ORACLE\ORADATA\TC\STB_REDO08.LOG
9 C:\APP\ORACLE\ORADATA\TC\STB_REDO09.LOG
--对比一下主库的日志文件
SQL> set lin 120 pages 120
SQL> col member for a60
SQL> select group#,member from v$logfile;
GROUP# MEMBER
---------- ------------------------------------------
2 +DATA/tc/onlinelog/group_2.262.855057605
2 +FRA/tc/onlinelog/group_2.258.855057607
1 +DATA/tc/onlinelog/group_1.261.855057597
1 +FRA/tc/onlinelog/group_1.257.855057601
3 +DATA/tc/onlinelog/group_3.266.855058587
3 +FRA/tc/onlinelog/group_3.259.855058591
4 +DATA/tc/onlinelog/group_4.267.855058593
4 +FRA/tc/onlinelog/group_4.260.855058595
由于主库没有创建备库日志文件,所以目前只有在线日志文件,共4组,分配给2个THREAD,每个THREAD使用2组,并且每组有2个MEMBER,一个放在+DATA,另一个放在+FRA
通过观察发现,此时在备库控制文件中记录的2个日志组位置,一个是通过LOG_FILE_NAME_CONVERT参数指定的从'+DATA/TC/ONLINELOG'转换到了'C:\APP\ORACLE\ORADATA\TC\',但是并没有指定过'+FRA/TC/ONLINELOGFILE',所以也就是现在看到的状态,+FRA那部分依然是主库的结构,但是备库是采用单实例本地磁盘的结构,并没有使用ASM磁盘组,那么这样2组日志,在备库应该怎么使用呢?
可以发现,其实此时在备库数据文件目录‘C:\APP\ORACLE\ORADATA\TC\’中,并没有生成‘GROUP_1.261.855057597’,‘GROUP_2.262.855057605’,‘GROUP_3.266.855058587’,‘GROUP_4.267.855058593’这4个在线日志文件,更别说是+FRA对应的4个文件了,即,在我们恢复数据库数据文件的时候,只会恢复数据文件和临时文件,那么应该如何创建这几个文件呢?
开始,我想到的是先把完全不可能存在的+FRA那组在线日志文件的内容,从备库控制文件中删除
SQL> alter database drop logfile '+FRA/tc/onlinelog/group_1.257.855057601';
alter database drop logfile '+FRA/tc/onlinelog/group_1.257.855057601'
*
第 1 行出现错误:
ORA-01514: 日志说明中出现错误: 没有此类日志
ORA-01517: 日志成员: '+FRA/tc/onlinelog/group_1.257.855057601'
很正常,因为并没有这个路径,就算有,ONLINE REDO LOG也不会在“RMAN> restore database;”命令中恢复
--尝试重建控制文件
SQL> oradebug setmypid
已处理的语句
SQL> alter database backup controlfile to trace;
数据库已更改。
SQL> oradebug tracefile_name
C:\APP\ORACLE\diag\rdbms\tcdg\tc\trace\tc_ora_1792.trc
用oradebug可以轻松地跟踪到具体的trace文件,而不需要执行复杂的sql查询语句
去目标路径打开这个tc_ora_1792.trc文件,可以发现创建控制文件的语句,这里选择NORESETLOGS,内容如下:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "TC" NORESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 192
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 32
MAXLOGHISTORY 292
*** 2014-08-13 09:30:03.000
LOGFILE
*** 2014-08-13 09:30:04.265
GROUP 1 (
'C:\APP\ORACLE\ORADATA\TC\GROUP_1.261.855057597',
'+FRA/tc/onlinelog/group_1.257.855057601'
) SIZE 50M BLOCKSIZE 512,
GROUP 2 (
'C:\APP\ORACLE\ORADATA\TC\GROUP_2.262.855057605',
'+FRA/tc/onlinelog/group_2.258.855057607'
) SIZE 50M BLOCKSIZE 512,
GROUP 3 (
'C:\APP\ORACLE\ORADATA\TC\GROUP_3.266.855058587',
'+FRA/tc/onlinelog/group_3.259.855058591'
) SIZE 50M BLOCKSIZE 512,
GROUP 4 (
'C:\APP\ORACLE\ORADATA\TC\GROUP_4.267.855058593',
'+FRA/tc/onlinelog/group_4.260.855058595'
) SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
-- GROUP 5 'C:\APP\ORACLE\ORADATA\TC\STB_REDO05.LOG' SIZE 50M BLOCKSIZE 512,
-- GROUP 6 'C:\APP\ORACLE\ORADATA\TC\STB_REDO06.LOG' SIZE 50M BLOCKSIZE 512,
-- GROUP 7 'C:\APP\ORACLE\ORADATA\TC\STB_REDO07.LOG' SIZE 50M BLOCKSIZE 512,
-- GROUP 8 'C:\APP\ORACLE\ORADATA\TC\STB_REDO08.LOG' SIZE 50M BLOCKSIZE 512,
-- GROUP 9 'C:\APP\ORACLE\ORADATA\TC\STB_REDO09.LOG' SIZE 50M BLOCKSIZE 512
DATAFILE
*** 2014-08-13 09:30:04.765
'C:\APP\ORACLE\ORADATA\TC\SYSTEM.256.855057451',
'C:\APP\ORACLE\ORADATA\TC\SYSAUX.257.855057453',
'C:\APP\ORACLE\ORADATA\TC\UNDOTBS1.258.855057453',
'C:\APP\ORACLE\ORADATA\TC\USERS.259.855057453',
'C:\APP\ORACLE\ORADATA\TC\EXAMPLE.264.855057687',
'C:\APP\ORACLE\ORADATA\TC\UNDOTBS2.265.855058289'
CHARACTER SET ZHS16GBK
;
--去掉+FRA在线日志文件内容后,执行创建语句
SQL> STARTUP NOMOUNT
SQL> CREATE CONTROLFILE REUSE DATABASE "TC" NORESETLOGS FORCE LOGGING ARCHIVELOG
2 MAXLOGFILES 192
3 MAXLOGMEMBERS 3
4 MAXDATAFILES 1024
5 MAXINSTANCES 32
6 MAXLOGHISTORY 292
7 LOGFILE
8 GROUP 1 (
9 'C:\APP\ORACLE\ORADATA\TC\GROUP_1.261.855057597'
10 ) SIZE 50M BLOCKSIZE 512,
11 GROUP 2 (
12 'C:\APP\ORACLE\ORADATA\TC\GROUP_2.262.855057605'
13 ) SIZE 50M BLOCKSIZE 512,
14 GROUP 3 (
15 'C:\APP\ORACLE\ORADATA\TC\GROUP_3.266.855058587'
16 ) SIZE 50M BLOCKSIZE 512,
17 GROUP 4 (
18 'C:\APP\ORACLE\ORADATA\TC\GROUP_4.267.855058593'
19 ) SIZE 50M BLOCKSIZE 512
20 -- STANDBY LOGFILE
21 -- GROUP 5 'C:\APP\ORACLE\ORADATA\TC\STB_REDO05.LOG' SIZE 50M BLOCKSIZE
512,
22 -- GROUP 6 'C:\APP\ORACLE\ORADATA\TC\STB_REDO06.LOG' SIZE 50M BLOCKSIZE
512,
23 -- GROUP 7 'C:\APP\ORACLE\ORADATA\TC\STB_REDO07.LOG' SIZE 50M BLOCKSIZE
512,
24 -- GROUP 8 'C:\APP\ORACLE\ORADATA\TC\STB_REDO08.LOG' SIZE 50M BLOCKSIZE
512,
25 -- GROUP 9 'C:\APP\ORACLE\ORADATA\TC\STB_REDO09.LOG' SIZE 50M BLOCKSIZE
512
26 DATAFILE
27 'C:\APP\ORACLE\ORADATA\TC\SYSTEM.256.855057451',
28 'C:\APP\ORACLE\ORADATA\TC\SYSAUX.257.855057453',
29 'C:\APP\ORACLE\ORADATA\TC\UNDOTBS1.258.855057453',
30 'C:\APP\ORACLE\ORADATA\TC\USERS.259.855057453',
31 'C:\APP\ORACLE\ORADATA\TC\EXAMPLE.264.855057687',
32 'C:\APP\ORACLE\ORADATA\TC\UNDOTBS2.265.855058289'
33 CHARACTER SET ZHS16GBK
34 ;
CREATE CONTROLFILE REUSE DATABASE "TC" NORESETLOGS FORCE LOGGING ARCHIVELOG
*
第 1 行出现错误:
ORA-01503: CREATE CONTROLFILE 失败
ORA-01565: 标识文件 'C:\APP\ORACLE\ORADATA\TC\GROUP_1.261.855057597' 时出错
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2)系统找不到指定的文件。
本地路径对应的在线日志不存在,刚才也已经说明了,那么是不是要把控制文件中的LOGFILE整段都去掉呢?
这个我没有做测试,觉得应该不用这么复杂,确保主库远程归档路径没有ERROR后,直接在备库启用REDO APPLY
SQL> recover managed standby database disconnect from session
完成介质恢复。
此时查看日志文件的状态,会发现,备库会对在线日志文件做CLEARING操作,从第1组到第4组,逐个进行,直到清除完毕,在清除的同时,会在数据文件目录中创建在线日志文件。
SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 3 CURRENT
2 3 CLEARING
3 2 INACTIVE
4 2 INACTIVE
SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 3 CURRENT
2 3 UNUSED
3 3 CLEARING
4 2 INACTIVE
SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 3 CURRENT
2 3 UNUSED
3 3 UNUSED
4 3 CLEARING
SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 3 CURRENT
2 3 UNUSED
3 3 UNUSED
4 3 UNUSED
可以看到,CLEARING操作更新了原来备库控制文件中错误的在线日志文件路径,并且在原来的基础上,又加了1组在线日组,并且会把还未使用到的日志组状态变成UNUSED。目前每个在线日志组有3个成员,一个在实例名tc下面,一个在DB_UNIQUE_NAME(TCDG)下面,另一个在FLASH_RECOVERY_AREA下面,这个可以通过查看v$logfile视图得到确认
SQL> col member for a70
SQL> select group#,member from v$logfile;
GROUP# MEMBER
---------- ----------------------------------------------------------------------
2 C:\APP\ORACLE\ORADATA\TC\GROUP_2.262.855057605
2 C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_2_9YOKR04W_.LOG
1 C:\APP\ORACLE\ORADATA\TC\GROUP_1.261.855057597
1 C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_1_9YOKQ7G5_.LOG
3 C:\APP\ORACLE\ORADATA\TC\GROUP_3.266.855058587
3 C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_3_9YOKRRJ3_.LOG
4 C:\APP\ORACLE\ORADATA\TC\GROUP_4.267.855058593
4 C:\APP\ORACLE\ORADATA\TCDG\ONLINELOG\O1_MF_4_9YOKSH5V_.LOG
5 C:\APP\ORACLE\ORADATA\TC\STB_REDO05.LOG
6 C:\APP\ORACLE\ORADATA\TC\STB_REDO06.LOG
7 C:\APP\ORACLE\ORADATA\TC\STB_REDO07.LOG
8 C:\APP\ORACLE\ORADATA\TC\STB_REDO08.LOG
9 C:\APP\ORACLE\ORADATA\TC\STB_REDO09.LOG
1 C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_1_9YOKQC7T_.LOG
2 C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_2_9YOKRBMK_.LOG
3 C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_3_9YOKRY8S_.LOG
4 C:\APP\ORACLE\FLASH_RECOVERY_AREA\TCDG\ONLINELOG\O1_MF_4_9YOKSK5C_.LOG
--查看数据文件
SQL> select file#,ts#,name from v$datafile;
FILE# TS# NAME
---------- ---------- ------------------------------------------------------------
1 0 C:\APP\ORACLE\ORADATA\TC\SYSTEM.256.855057451
2 1 C:\APP\ORACLE\ORADATA\TC\SYSAUX.257.855057453
3 2 C:\APP\ORACLE\ORADATA\TC\UNDOTBS1.258.855057453
4 4 C:\APP\ORACLE\ORADATA\TC\USERS.259.855057453
5 6 C:\APP\ORACLE\ORADATA\TC\EXAMPLE.264.855057687
6 5 C:\APP\ORACLE\ORADATA\TC\UNDOTBS2.265.855058289
--查看临时文件
SQL> select file#,ts#,name from v$tempfile;
FILE# TS# NAME
---------- ---------- ------------------------------------------------------------
1 3 C:\APP\ORACLE\ORADATA\TCDG\DATAFILE\O1_MF_TEMP_9YOKLBG5_.TMP
注意默认是的临时文件存放位置是在TCDG下面,而不是tc,可以不做处理。但如果觉得别扭,可以先增加一个临时表空间,指定临时文件存放到tc目录下,然后再删除现有的临时表空间,注意删除的时候要指定including contents and datafiles,才会在删除表空间的时候连数据文件一起删除
最后,再做一个DG同步测试(注意执行各命令时的TIME)
--主库:
SQL> set time on; --为了使主备库两边的操作更加能说明问题,设置操作时间
10:47:59 SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 53
下一个存档日志序列 54
当前日志序列 54
10:48:05 SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 2 ACTIVE
2 2 CURRENT --当前CURRENT在group2,注意后面切换日志后的STATUS
3 2 INACTIVE
4 2 INACTIVE
10:48:31 SQL> select sequence#,thread#,applied,archived fromv$archived_log where sequence#>49 order by 1;
SEQUENCE# THREAD# APPLIED ARC
---------- ---------- --------- ---
50 1 YES YES
50 1 NO YES
51 1 YES YES
51 1 NO YES
52 1 YES YES
52 1 NO YES
53 1 NO YES
53 1 YES YES
10:49:35 SQL> create user zlm identified by aaron8219; --注意创建用户的时间,在备库是否能立即使用
用户已创建。
10:50:45 SQL> conn zlm/aaron8219
ERROR:
ORA-01045: 用户 ZLM 没有 CREATE SESSION 权限; 登录被拒绝
警告: 您不再连接到 ORACLE。
10:51:06 SQL> grant create session,resource to zlm;
SP2-0640: 未连接
10:51:37 SQL> conn /as sysdba
已连接。
10:51:43 SQL> grant create session,resource to zlm;
授权成功。
10:51:52 SQL> conn zlm/aaron8219
已连接。
10:51:59 SQL> create table test1(int number,name varchar2(10));
表已创建。
10:52:27 SQL> insert into test1 values(1,'aaron8219');
已创建 1 行。
10:52:48 SQL> commit;
提交完成。
10:53:13 SQL> alter system archive log current;
alter system archive log current
*
第 1 行出现错误:
ORA-01031: 权限不足
10:53:29 SQL> conn /as sysdba
已连接。
10:53:41 SQL> alter system archive log current; --有了这个操作,备库才会接受到主库变更,才能登陆zlm用户
系统已更改。
10:54:16 SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 2 CURRENT --注意,由于是在节点1上做的操作,始终只会用到group1和group2这2个日志组
2 2 ACTIVE
3 2 INACTIVE
4 2 INACTIVE
10:55:32 SQL> drop user zlm;
drop user zlm
*
第 1 行出现错误:
ORA-01922: 必须指定 CASCADE 以删除 'ZLM'
10:57:05 SQL> drop user zlm cascade; --注意drop用户的时间,对照备库此时对该用户的操作情况
用户已删除。
10:57:16 SQL> conn zlm/aaron8219
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
警告: 您不再连接到 ORACLE。
10:58:32 SQL> alter system archive log current;
SP2-0640: 未连接
10:58:43 SQL> conn /as sysdba
已连接。
10:58:51 SQL> alter system archive log current; --备库从这个时间点开始,无法再连接到zlm用户,因为已删除
系统已更改。
10:59:23 SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 2 ACTIVE
2 2 CURRENT --再次切换日志后,CURRENT又回到group2
3 2 INACTIVE
4 2 INACTIVE
10:59:29 SQL>
--备库:
SQL> set time on;
10:48:46 SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 53
下一个存档日志序列 0
当前日志序列 54
10:48:48 SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 3 CLEARING
2 3 CURRENT --与主库一开始的STATUS对应,主库每切换一次,备库也切换一次
3 3 UNUSED
4 3 UNUSED
10:49:07 SQL> select sequence#,thread#,applied,archived from v$archived_log wher
e sequence#>49 order by 1;
SEQUENCE# THREAD# APPLIED ARC
---------- ---------- --------- ---
50 1 YES YES
51 1 YES YES
52 1 YES YES
53 1 YES YES
已选择8行。
10:50:00 SQL> conn zlm/aaron8219 --主库是在10:53:41时刻才切换日志的,早于该时间点,并没有zlm用户
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
警告: 您不再连接到 ORACLE。
10:53:59 SQL> conn zlm/aaron8219 --只有备库应用了主库切换的归档日志后,备库才能同步主库数据
已连接。
10:54:41 SQL> select * from test1;
INT NAME
---------- ------------------------------------------------------------
1 aaron8219
10:54:50 SQL> conn /as sysdba
已连接。
10:55:58 SQL> conn zlm/aaron8219
已连接。
10:56:21 SQL> select group#,members,status from v$log;
select group#,members,status from v$log
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
10:56:33 SQL> conn /as sysdba
已连接。
10:56:44 SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 3 CURRENT --此时主库已经发生过一次切换,所以CURRENT从group2到group1上
2 3 CLEARING
3 3 UNUSED
4 3 UNUSED
10:56:47 SQL> conn zlm/aaron8219
已连接。
10:57:56 SQL> select * from test1; --主库在10:57:05时刻进行了drop user,但zlm用户依然可以查询
INT NAME
---------- ------------------------------------------------------------
1 aaron8219
10:59:06 SQL> select * from test1; --主库在10:58:51时刻进行了日志切换,备库应用了这个归档,zlm无法查询
select * from test1
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
10:59:46 SQL> conn zlm/aaron8219 --之后也无法继续连接zlm用户,因为删除用户的操作已经在备库生效
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
警告: 您不再连接到 ORACLE。
10:59:50 SQL> conn /as sysdba
已连接。
11:00:02 SQL> select group#,members,status from v$log;
GROUP# MEMBERS STATUS
---------- ---------- ----------------
1 3 CLEARING
2 3 CURRENT --主库经过第2次切换日志后,备库在线日志又从group1回到了group2
3 3 UNUSED
4 3 UNUSED
11:00:05 SQL>
非duplicate方式搭建物理standby总结:
1.在11g中,用传统方法来创建备库可以和10g一样,但是要注意用直接创建文件的方式来生成备库控制文件,而不是用备份集。
2.开启REDO APPLY以后,会自动清除控制文件中旧的信息(这里指存放路径),并立即逐个生成ONLINE REDO LOGFILE,会在原来的基础上再多加一组在线日志。
3.和采用duplicate方式创建的备库结果一致,每组也是生成3个在线日志成员,惟一的区别就是在duplicate中必须用SET NEWNAME FOR TEMPFILE 1 TO 'C:\xxxx',来指定一个路径和文件名,否则会报冲突,无法完成duplicate。
4.需要拷贝主库密码文件到备库相应位置,而duplicate是自动在备库创建的,duplicate还能用spfile参数指定并在备库直接生成spfile,而普通方式在完成后需要手动创建一个spfile。
三 : 请教:怎样打小人?和要注意的问题。
请教:怎样打小人?
请教:怎样打小人? 和要注意的问题。
用白布做一个小人,最好有那个人的特征,在正面写繁体名字。用针扎~~~~OK
四 : 学跳摩登舞必须要注意到的问题
“男士在舞蹈过程中,始终要感觉到颈部有长度,要让耳朵竖起来。[www.61k.com)”这句话对做好头部的姿势是很重要的。
男士在跳舞的时候,要将脖子放到脊柱上,轻松自然的梗直脖子,要感觉到,从脖子根部到头顶的长度,并将耳朵竖起来,从而使脑袋不至于前倾或后仰。
从事舞蹈的男士,对于胸部来说,是一种“阴入”的感觉,应向内“含”一些,并且达到直背(通过脊椎向上拔起),而不是平常说的那种挺胸抬头的姿势。要将胸部向后“阴入”(感觉五脏六腑自然收紧,但决不可以吸气憋着)。这样就是我们通常说的“含胸拔背”。
对女士而言,是将左侧背部前挺、右肩略后收),这样做也就是通俗说的“打开胸腰”。将“五脏六腑收紧”放到后腰的脊柱上,让你的中段后面饱起来。左右肩胛骨放在背部并沉到胯上,臀部贴到大腿上,夹住尾椎骨。
摩登五支舞的运动,身体先要向自己要去发展的方向移动,随后,腿再随身体移动到达位置。“身体是先发而后至,而腿是后发而先至”产生身体重心流向。
摩登舞 学跳摩登舞必须要注意到的问题
向前移动的时候,必须用颈部至心窝的中心线去牵引摆动腿(动力脚),当摆动腿到位后,让颈部至心窝的中心线与你新的支撑腿(重心腿)的垂直线重合。[www.61k.com]
向后移动的时候,必须用你的脊柱去找你的摆动腿,让你的脊柱向你的摆动腿的方向移动,当摆动腿到位形成新的支撑腿后,让你的脊柱放到该支撑腿上,让脊柱和这只支撑腿(重心腿)的垂直线重合。这就是移动中的“身体重心流向”。
摩登舞 学跳摩登舞必须要注意到的问题
体育舞蹈,它的主要力源是来自腰部,腰部的发力是身体动力的主要力量。(www.61k.com)脚对地板的压力、推力和后登之力是一种辅助性力量,属其次地位。
另外,还有上半身摆荡的力、身体移动惯性的力、向心力、离心力、重力、下降势能等。要体会腰部的发力作用,不妨去体会一下,双人“荡秋千”的感觉,你会感到两个人腰部的合力,你会感到两个人心往一处想,劲往一处使的美妙。
腰部的发力,有如水流暗涌,只见其形,不见其力。
摩登舞 学跳摩登舞必须要注意到的问题
在舞蹈中,始终要以腰为统帅,以上半身在空间的稳定挪移和灵活变幻式流动为主体,腿的到位是一个重要的辅助,如影随形。[www.61k.com)
同时支撑腿和摆动腿在舞蹈过程中不断的协助上身创造着各种优美的线条。稳定的下盘使上半身更能自如地表现好上半身优美的形体造型。
摩登舞 学跳摩登舞必须要注意到的问题
舞伴之间的身体架形犹如被焊接一般,两人之间的胯像缝合在一起,两人的胯与胯之间,退要有吸力,进要有顶力。(www.61k.com)
退的一方腹股沟要收(常说的断沟),要互让,要打折,要给前进方留有空间,前进方要把自己的腹股沟填充进入,对方让出的空间,身体重心迅速跟进到位。双方舞蹈的流动主要是走一些平行线或瞬间的交叉线。
摩登舞 学跳摩登舞必须要注意到的问题
想象中,男女舞伴的胯,是个大花盆。(www.61k.com]四条腿是它的根。花盆上面就是花的主干和花枝。男士的上半身应该是这盆花的主干,女士的上半身应该是这盆花的花枝,花的主干和花枝是永远挺拔向上向远延伸的,也是灵活放松的,不是僵硬死板的。
根和花盆是需要稳定的,而长在它上面的主干和花枝是需要流动和展现的。
摩登舞的引导问题,现在就要讲怎样跳好摩登舞的问题。那么首先遇到的就是舞姿问题,也就是身体的曲线和延展问题。
本文标题:
运用史料要注意的问题-ASP.NET中使用数据处理插入数据注意的问题 本文地址:
http://www.61k.com/1153830.html