The game started out the same way as Game 1, with Texas taking a very early lead.
In the first, Ian Kinsler got a quick hit with a leadoff triple when the ball hit off the left-field wall and rolled to the right of Carlos Lee. A sacrifice fly to right field by Ramon Vazquez in the next at-bat scored Kinsler.
The parallel continued in the second with the Astros again taking the lead.
This time, two unlikely batters did the damage. Oswalt singled to center field on a grounder, and center fielder Michael Bourn scored him with his fourth home run of the year.
"I was just trying to relax at the plate," Bourn said. "I saw a good pitch, it cut inside, and I got my hands inside of it. I knew I had it when I hit it."
But unlike Tuesday's game, the Rangers rallied with a two-run homer in the fourth.
First baseman Frank Catalanotto singled to right before catcher Max Ramirez, in just the second start of his Major League career, hit a shot to the gas-station patio in left-center field.
Oswalt said it was difficult to figure out how to pitch to Ramirez.
"I had one pitch that came back over the plate for a two-run home run," Oswalt said of the 3-1 pitch. "I threw a fastball with a new guy on the plate. It took about three at-bats before I figured out what he was trying to do."
Oswalt (6-8, 4.77 ERA) struck out five batters and walked none.
He said he is beginning to feel much more comfortable on the mound, which Astros manager Cecil Cooper said is apparent.
"I thought Roy pitched excellent tonight," Cooper said. "His fastball had life, his location and everything was good, and he even threw a good breaking ball tonight. He moved the ball around. He hit 94 [mph] a few times."
But the Rangers did just enough to keep themselves ahead.
Houston did not help its ace much either after the second inning. The Astros stranded seven runners in the next seven frames, including two on third base. They also left two stranded in the first.
The Astros had their best shot of the night in the bottom of the ninth as they loaded the bases.
Third baseman Ty Wigginton doubled to right field, Bourn walked on a 3-2 count with two outs and second baseman Mark Loretta reached on a fielding error by Texas third baseman Vazquez to load the bases.
But shortstop Miguel Tejada grounded into a fielder's choice to end the game.
First baseman Lance Berkman, who was 2-for-4 with two doubles, said the effort and potential to win in the ninth were there, but he is disappointed the Astros didn't back Oswalt.
"It's been a little bit more of a rough year for [Oswalt]," Berkman said. "When he's pitched well, it seems like we haven't really given him that much run support. He's certainly been a lot better and more like the old Roy. When you get a good pitching performance like that you hope to win those games."
Rangers starter Scott Feldman threw four innings and allowed six hits and two runs. Luis Mendoza (1-2, 5.74) recorded the win with two hits in three innings, striking out two.
C.J. Wilson closed out the game for Texas, recording his 16th save.
"We fought," said Bourn, who was 2-for-4. "But you have to give credit to that pitcher. He had some nasty stuff. He was sinking the ball and had a good slider.
"Roy was awesome on the mound tonight, and that's what we want. We just came up with the short end of the stick."