跳至主要内容

Shell实际运用和Oracle DataGuard一天小结

在实际生产应用中,其实我可以这么些,首先判断这个人是不是ROOT
那么就需要在脚本中写上这么个判断语句:
#!/bin/sh

#ifroot
if [ "$LOGNAME" != "root" ]
then
echo "You
need to be
root to run this script" >&2
exit 1
else
echo "Yes
indeed
you are $LOGNAME proceed"
fi



return是函数返回,exit是结束进程.
exit(0); /*这个是正常的关闭所有程序 */
exit(1); /*这个就刚好相反,有错误的关闭 */

/dev/null #表示的是类似于windows的回收站,无限大 2>&1#表示将这些在后台处理

同样的语句在solaris下和RH下有点不同,当我使用exit语句时rh下会执行,而solaris直接就是跳出。也是是因为SHELL不同的缘故。

在for in中加” ”就是字符串,数字不加就是数字显示的是竖直排列,家了引号后就是横向排列了。
在使用的时候Sorlaris不支持$()这样的在shell中嵌套的写法,反而是支持``反引号的写法,RH测试两者都支持。

可以用ls wc –l显示文件夹的文件数,用shell的话是做个count
#!/bin/sh
#forcount
counter=0
for files in *
do
counter=`expr $counter + 1`
done
echo "count the `pwd` total files
is $counter"


要想从命令行启动mysqld服务器,你应当启动控制台窗口(或“DOS window”)并输入命令:
C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqld
根据系统中MySQL安装位置的不同,前面的例子中使用的路径也不同。
在非NT版本的Windows中,在后台启动mysqld。也就是,服务器启动后,你应当可以看见后面的命令提示。如果你用该方法在Windows NT、2000、XP或2003中启动服务器,服务器则在前台运行,在服务器退出前,不会出现命令提示。因此,当服务器运行时,应当打开另一个控制台窗口来运行客户端程序。
下述命令可以停止MySQL服务器:
C:\> C:\Program Files\MySQL\MySQL Server 5.0\bin\mysqladmin -u root shutdown
该命令调用MySQL管理工具mysqladmin连接服务器并告知它关闭服务。该命令使用MySQL root用户连接,这是MySQL权限系统中的默认管理账户。请注意MySQL权限系统中的用户完全独立于Windows下的登录用户。
如果mysqld不能启动,检查错误日志看看服务器是否写入了显示问题原因的任何消息。错误日志位于C:\Program Files\MySQL\MySQL Server 5.1\data目录中。是带后缀.err的文件。还可以尝试将服务器启动为mysqld --console;此时,可以从窗口中获得一些有用的信息,可以帮助解决问题。
最后选项是用--standalone --debug启动mysqld。此时,mysqld 写入日志文件C:\mysqld.trace,应当包含mysqld不启动的原因。
使用mysqld --verbose --help显示mysqld的所有选项。



使用脚本中的函数参数作为shell命令,一开始不是很明白现在有点明白了,在刚刚开始的使用你如同平时写脚本一般将函数写进去,例如
findit(){
if [ $# -lt 1 ]
then
echo "usage :findit file"
return
1
fi
find / -name $1
}


然后写完chmod后,在执行下. ./XXX,当你在命令行下用set命令后你会发现他已经被加载到你的用户下,当然了在你退出这个session后,会自动消失的。那么这个使用你在使用这个函数类似于findit他就不会报错,而且也不需要向刚刚执行脚本一样,而他直接已经加载到你的bin下,所以当我使用findit main的时候他会全盘搜索,但是用于我是用其他用户的所以不能找到,因为权限不够。
当使用了unset命令后则可以将已经加载的这个函数去除。Set后他已经不再了

参数输入没怎么细看,有些用的找有些用不着 -、-

scp /home/daisy/full.tar.gz root@172.19.2.75:/home/root 也就是说可以基于SSH进行文件的传输
ssh 下如果我登陆别的服务器或者说是被改变了端口的服务器那么我需要用到的是
ssh –p 10088 192.168.18.91 假如我91的SSH端口是10088

Oracle DATAGUARD
-------------------------------------------------------------------------
我在备份服务器上MOUNT的时候只用了一个CONTROLFILE所以我alter system mount database;的时候怎么也MOUNT不起来。


我在做采用ARCH归档日志的最大性能
SQL>alter system set log_archive_dest_2='SERVICE=dbstandby REOPEN=300'
scope=both;
SQL> alter system set log_archive_dest_state_2=enable
scope=both;
SQL>alter system archive log current;

在做第一句的时候提示不能写pfile,然后用show parameter spfile以后发觉我果然是用pfile启动的,那么之后我就直接修改目前pfile的语句,而
SQL>alter system set log_archive_dest_2='SERVICE=dbstandby REOPEN=300'
scope=both

也改成

SQL>alter system set log_archive_dest_2='SERVICE=dbstandby REOPEN=300'
scope=memory;
在vi中编辑
*.log_archive_dest_2='SERVICE=dbstandby REOPEN=300'
*.log_archive_dest_state_2=enable scope=both



关于如何检查和校验是否备用服务器设置成功
[3] STANDBY_ARCHIVE_DEST
*.standby_archive_dest='/oracle/oracle9i/oradata/archive' 这段在备库的文件中添加表示的是你将传过来的log存放的位置,那么还可以在你ORACLE安装的admin/cdump下找到,alert_log..这个文件中找到,当你在主库做一次log切换的时候例如说你alter system switch logfile;之后那么就会从主库传log到备库上去,而且同时在上面提到的两个log文件中出现。
以上是我白天做了一天的DG的一些错误解析,那么我晚上小小的来解析下。
这个做完大概是MAXIMIZE PERFORMANCE。由于是练手,那么其实在练习过程前,领导已经练习过了做好了大概的pfile,所以在使用之前我并没有自己建立属于自己的PFILE,在我做
SQL>SHOW PARAMETER SPFILE
则显示的空字段,那么我是以PFILE启动的,将文档设为强制
SQL>ALTER DATABASE FORCE LOGGING;
两台机子的环境要设成一样。然后将进行以下步骤
$cd $ORACLE_BASE
$mkdir -p oradata/tbdb/archiv
$mkdir -p
admin/tbdb/bdump
$mkdir -p admin/tbdb/cdump
$mkdir -p admin/tbdb/udump
我因为篇幅的关系我下面就不写了,但是我现在环境下$diff initora9i.ora_pri initora9i_std比较了一下其中
#if change controlfile then edit this
*.control_files='/u01/oracle/oradata/tbdb/control01.ctl',
'/u01/oracle/oradata/tbdb/control02.ctl',
'/u01/oracle/oradata/tbdb/control03.ctl'
#standby database parameter
*.standby_file_management=AUTO
*.remote_archive_enable=TRUE
*.standby_archive_dest='/u01/oracle/oradata/tbdb/archive'
*.fal_server='DBPRIMARY'
*.fal_client='DBSTANDBY'
大概的差距如何具体解释下,在写的过程中,如果你把controlfile改写了后需要把位置改下,同时把备课的时间改写,特别要注意的是fal_server和fal_client的改写,在fal_client这里很重要的就是你以后再实行找到备库的名字。
在主库rman下backup database和logfile,在备库中Oracle

$rm $ORACLE_HOME/dbs/orapw$ORACLE_SID
$orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=test entries=4
我在做的时候按照教程设了两个listener一个1521一个1522端口。在备库上较复杂在主库上则比较简单。
下一步就需要在主库上生成控制文件SQL> alter database create standby controlfile as '路径和控制文件名'在做一次$ scp,例如今天的环境下$scp 路径和名称 192.168.18.92:'路径和名称'。
在备库中启动
SQL> connect / as sysdba Connected to an idle instance.
SQL>startup nomount pfile=路径
SQL>alter database mount standby database;

之后rman了以后进行restore database和restore archivedlog all.
在arch模式下用
SQL>alter system set log_archive_dest_2='SERVICE=dbstandby REOPEN=300'
scope=both;
SQL>alter system set log_archive_dest_state_2=enable scope=both;
SQL>alter system archive log current;
如何验证呢
SQL>SELECT SEQUENCE#,FIRST_TIME,NEXT_TIME FROM V$ARCHIVED_LOG;
这样可以看

当我在tail -10 $ORACLE_BASE/ora9/admin/dbump/alter_.....log这个的时候可以看出他现在正在等哪个,第一次我没有做成功的原因是我不知道如何将日志穿到备库上。而这时候需要老师点播了,在主库上做一次SQL>alter system switch logfile;这时候tail的时候你可以看到已经传到备库了。今天就到这里了。明天最剩下的工作。

评论

此博客中的热门博文

Python学习笔记20100117

映射list   Dictionary 是用{}. list 是一那个[]. turple是用() 当你定义过dictionary后,你可以使用d.keys(), d.values(),d.items()将定义后的时候分别显示出来 当然可以将list里的值加减乘除,也可以如一般的定义直接重新复制这个list. 链接与分割字符串的 li=";", join(li) 则显示的就是 分隔符为;的数 如果使用li=li.split(";")则将刚刚;的分隔符删除,而split里也可定义域,如li.split(";",1)   自省 <---这是啥 之前在使用的时候发觉有些书本上的模块不能调用,很多是py脚本定义过的函数。 下载该脚本s,然后上传至指定位置。 >>>import sys >>>sys.path >>>sys.path.append("绝对位置")然后就能调用这些脚本和参数了。 删除 >>>sys.path.pop() 定义一个参数是 def info(test, test1=10.test2=12): info是函数名,test是必备参数,因为没有定义值,test1和test2是可选参数,定义了初始值   以上是外部函数的调用,下面转到内部函数 内部函数有type,str,dir及其他   ---type 返回任意字符的类型,模块也可以。types模块 >>> type(1) <type 'int'> >>> li=[] >>> type(li) <type 'list'> >>> import odbchelper >>> type(odbchelper) <type 'module'> >>> type(sys) <type 'module'> >>> import types ...

Python学习笔记20100128

methodList = [method for method in dir(object) if callable(getattr(object, method))] ###插一句, ifconfig pcn0 unplumb 去禁solaris的网卡plumb起网卡   and, or  已经and-or一起用。 and 两者为真,print第二个数,一个为假一个为真返回假,三者为真返回最后一个真。 or 两个为真,返回第一个, 一个为假一个为真返回真,三者为假返回最后一个假   lambda可快速定义最小值函数   g = lambda x:x*2 g(3) 6 (lambda x:x*2)(3)   doc string print getattr(object,mothod).__doc__   ljust ljust 用空格填充字符串以符合指定的长度。info 函数使用它生成了两列输出并将所有在第二列的 doc string 纵向对齐。 如果小于的话不会从中截断   -----面向对象 首先导入,你可以选择import module or from module import module 如果你要经常访问模块的属性和方法,且不想一遍又一遍地敲入模块名,使用 from module import。 如果你想要有选择地导入某些属性和方法,而不想要其它的,使用 from module import。 如果模块包含的属性和方法与你的某个模块同名,你必须使用 import module 来避免名字冲突   -----类的定义 class Lofs    pass   这个类的名字是 Loaf,它没有从其它类继承。 类名通常是第一个字母大写,如:EachWordLikeThis,但这只是一个习惯,不是一个必要条件。   这个类没有定义任何方法或属性,但是从语法上,需要在定义中有些东西,所以你使用 pass。这是一个 Python 保留字,仅仅表示 “向前走,不要往这看”。它是一条什么都不做的语句,当你删空函数或类时,它是一个很好的占位符。   你可能猜...

Back to Blog again

     My last blog was almost 6 years again.  lots of things happening those years. like marriage, and move to another country, simply relocation, something is very big in my life.      Back to now,  I guess it is a very good time to start with the blog again. no matter daily life or the tech parts.      These blog may or will contains various languages, Chinese, English or Few Japanese. The first thing, I change the profile to Kamata life, Kamata is Japanese words. "鎌田"  as Kanji. why this change happened, due to we will move from Tamagawa "玉川" to Kamata very soon. I hope I can start to write this not daily, but I hope I can do this continuously.